Ajax не пройдет дальше readyState 1, почему?
-
09-09-2019 - |
Вопрос
Я пытаюсь заставить работать эту функцию, которая выполняет запрос параметра url
затем отправляет responseText в callback
который является функцией.
Кажется, что дело доходит только до readyState 1
(благодаря командам Firebug).
Вот оно:
function Request(url, callback){
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else{
return false;
}
httpRequest.onreadystatechange = function(){
console.log(httpRequest.readyState);
if (httpRequest.readyState == 4) {
callback(httpRequest.responseText);
}
};
console.log(httpRequest, url);
httpRequest.open('GET', url, true);
httpRequest.send(null);
}
Решение
Я решил эту проблему, назначив событие onload вместо onreadystatechange:
function Request(url, callback){
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else{
return false;
}
var readyStateChange = function(){
console.log(httpRequest.readyState);
if (httpRequest.readyState == 4) {
callback(httpRequest.responseText);
}
};
if (isFirefox && firefoxVersion > 3) {
httpRequest.onload = readyStateChange;
} else {
httpRequest.onreadystatechange = readyStateChange;
}
console.log(httpRequest, url);
httpRequest.open('GET', url, true);
httpRequest.send(null);
}
Другие советы
Убедитесь, что рассматриваемый URL-адрес действительно отвечает, посетив его непосредственно в браузере.
Проверьте в другом браузере, результат тот же.
Используйте какой-нибудь HTTP-монитор для наблюдения за разговором между клиентом и сервером (мой любимый вариант — Скрипач)
Возможно, запрос Ajax не возвращает данные (то есть какая-то ошибка на стороне сервера).Попробуйте включить опцию «показать XMLHttpRequests» в консоли Firebug, чтобы проверить это.
Я также столкнулся с той же проблемой.Прочитав URL-адрес ниже, я решил свою проблему.
http://bytes.com/topic/javascript/answers/548442-ajax-readystate-1-wall
по сути, когда я назначаю свою функцию прослушивателем событий для httpRequest.onreadystatechange, я не могу передать ей какую-либо переменную.ТАК, что мне нужно встроить переменную внутри строки HTTP POST в серверную часть, а затем получить ее обратно из ответа HTTP.
На ФФ 3 работает нормально.Нет необходимости использовать jQuery.
У меня была такая же проблема в FireFox, но не в Chrome.
Проблема заключалась в том, что в моем ответе для mime-типа было установлено значение "application / octet-stream".
Изменив его на "text / html", он заработал и в FireFox.