Ajax не пройдет мимо readyState 1, почему?
Я пытаюсь заставить эту функцию работать, которая делает запрос на параметр url
затем отправляет текст ответа 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);
}
5 ответов
Я решил эту проблему, назначив событие 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-монитора для наблюдения за разговором клиента с сервером (мой любимый - Fiddler)
Возможно, запрос Ajax не возвращает данные (так что какая-то ошибка на стороне сервера). Попробуйте включить опцию "show XMLHttpRequests" в консоли firebug, чтобы проверить это.
У меня была такая же проблема на FireFox, но не на Chrome.
Проблема заключалась в том, что в моем ответе был установлен тип mime "application/octet-stream".
Изменение его на "text/html" сделало так, чтобы оно работало и в FireFox.
Я также столкнулся с той же проблемой. Читая URL-адрес ниже, я понял мой.
http://bytes.com/topic/javascript/answers/548442-ajax-readystate-1-wall
в основном, когда я назначаю свою функцию в качестве прослушивателя событий для httpRequest.onreadystatechange, я не могу передать ей какую-либо переменную. ТАК, что мне нужно встроить переменную внутри строки HTTP POST в серверную часть, а затем получить ее обратно из ответа HTTP.
Он отлично работает для FF 3. Нет необходимости использовать jQuery.