Я написал более подробную статью здесь , но это основная идея.
Значение true означает, что вы делаете асинхронный запрос. Это означает, что код не приостанавливается до тех пор, пока http-запрос не будет выполнен. Синхронный вызов блокирует браузер, поэтому больше ничего не запускается. Это может вызвать проблемы, поэтому люди предпочитают асинхронные.
Объект XHR информирует нас о том, что он делает. Это дает нам обновления с событием onreadystatechange. Мы регистрируем функцию, чтобы отслеживать ее статус. Onreadystatechange вызывается 4 раза. Каждый с другим состоянием
0 = uninitialized
1 = loading
2 = loaded
3 = interactive
4 = complete
Данные доступны нам, когда состояние готовности равно 4.
Теперь в коде, который вы разместили, он проверяет полное состояние и проверяет, что статус равен 200 [ok]
if(xml_req.readyState == 4 && xml_req.status == 200){
Значение для xmlResponse будет неопределенным, если вы попытаетесь использовать его где-то еще в коде, прежде чем оно будет возвращено. Пример
ml_req.send(null);
alert(xmlResponse );
Одной из самых первых статей в статье XMLHttpRequest может быть хорошее чтение для вас. Статья Apple на xmlhttpreq