Вы можете использовать функцию внутри оператора if. Эта функция выполняется, когда состояние готовности изменяется на 4.
var handleResponse = function (status, response) {
alert(response)
}
var handleStateChange = function () {
switch (xmlhttp.readyState) {
case 0 : // UNINITIALIZED
case 1 : // LOADING
case 2 : // LOADED
case 3 : // INTERACTIVE
break;
case 4 : // COMPLETED
handleResponse(xmlhttp.status, xmlhttp.responseText);
break;
default: alert("error");
}
}
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=handleStateChange;
xmlhttp.open("GET","SBL_PROBES.htm",true);
xmlhttp.send(null);
Ваш старый код выполнял асинхронный вызов и продолжал только с оператором оповещения. T был пуст в это время.
Хорошо, я немного объясню, как все это работает:
Сначала мы определяем две функции обратного вызова, которые мы вызываем позже в запросе, с именами handleResponse и handleStateChange.
После этого мы создаем объект, который представляет XMLHttpRequest
var xmlhttp=new XMLHttpRequest();
Это приводит к тому, что Объект выглядит следующим образом (просто):
XMLHttpRequest { status=0, readyState=0, multipart=false, onreadystatechange=handleEvent()}
При вызове функции open (...) вы устанавливаете параметры для запроса:
xmlhttp.open("GET","SBL_PROBES.htm",true);
Это означает, что нужно выполнить асинхронный GET-запрос для извлечения страницы SBL_PROBES.htm.
Затем вызывается функция send (...), которая запускает сам запрос.
Мы зарегистрировали функцию обратного вызова для onreadystatechange, как вы можете себе представить, это на самом деле eventHandler. Каждый раз, когда состояние изменяется, эта функция вызывается. (Это так же, как если бы вы регистрировали функцию обратного вызова в событии onKeyUp в форме, этот обратный вызов срабатывает каждый раз, когда повышается ваш ключ :))
Единственный случай, который представляет интерес для вашей проблемы - это состояние 4. Для этого функция обратного вызова handleRequest вызывается только в состоянии 4. В этот момент ваш запрос фактически имеет результат, а затем статус. (Состояние означает, что ваш веб-сервер вернул код состояния 200 = в порядке, 404 = не найден и т. Д.)
Это не вся магия, которая скрывается за Ajax, но должна дать вам упрощенный обзор того, что на самом деле происходит за кулисами.
Важно, чтобы вы проверили это на веб-сервере, не используйте file: // для тестирования.
Если вам нужна более подробная информация, просто дайте мне знать.