Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top