Ajax не пройдёт готовое состояние 1, почему? - PullRequest
10 голосов
/ 15 апреля 2009

Я пытаюсь заставить эту функцию работать, которая выполняет запрос параметра 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);
}

Ответы [ 5 ]

4 голосов
/ 08 июня 2009

Я решил эту проблему, назначив событие 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);
}
2 голосов
/ 15 апреля 2009

Убедитесь, что URL действительно отвечает, посетив его непосредственно в браузере.

Тест с другим браузером, вы получите тот же результат.

Используйте некоторую форму HTTP-монитора для наблюдения за разговором клиента с сервером (мой любимый Fiddler )

1 голос
/ 15 апреля 2009

Возможно, запрос Ajax не возвращает данные (так что какая-то ошибка на стороне сервера). Попробуйте включить опцию «show XMLHttpRequests» в консоли firebug, чтобы проверить это.

0 голосов
/ 01 сентября 2018

У меня была такая же проблема на FireFox, но не на Chrome.

Проблема заключалась в том, что в моем ответе был установлен тип mime "Приложения / октет-поток".

Изменение его на "text / html" сделало так, чтобы оно работало и в FireFox.

0 голосов
/ 09 сентября 2010

Я тоже сталкивался с такой же проблемой. Прочитав приведенный ниже URL, я решил, что мой.

http://bytes.com/topic/javascript/answers/548442-ajax-readystate-1-wall

В принципе, когда я назначаю свою функцию в качестве прослушивателя событий для httpRequest.onreadystatechange, я не могу передать ей какую-либо переменную. ТАК, что мне нужно встроить переменную внутри строки HTTP POST в серверную часть, а затем получить ее обратно из ответа HTTP.

Отлично работает для FF 3. Нет необходимости использовать jQuery.

...