Ajax不会超过readyState 1,为什么?

时间:2009-04-15 11:29:46

标签: javascript ajax readystate

我正在尝试让这个函数起作用,然后请求参数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 个答案:

答案 0 :(得分:4)

我解决了这个问题,分配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);
}

答案 1 :(得分:2)

通过直接在浏览器中访问,检查相关网址是否确实响应。

使用其他浏览器进行测试会得到相同的结果。

使用某种形式的HTTP监视器来观察客户端到服务器的对话(我最喜欢的是Fiddler

答案 2 :(得分:1)

可能Ajax请求不返回数据(因此,某种服务器端错误)。尝试在firebug控制台中启用“show XMLHttpRequests”选项,以检查这一点。

答案 3 :(得分:0)

我也面临同样的问题。通过阅读下面的网址,我得到了解决。

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

基本上,当我将我的函数指定为httpRequest.onreadystatechange的事件监听器时,我无法将任何变量传递给它。所以我必须将变量嵌入到HTTP POST字符串中的服务器后端,然后从HTTP响应中恢复它。

它适用于FF 3.无需使用jQuery。

答案 4 :(得分:0)

我在FireFox上遇到了同样的问题,但在Chrome上却没有。

问题是我的回复将mime类型设置为  “应用程序/八位字节流”。

将其更改为“ text / html”使其也可以在FireFox上运行。