14

我试图让这个函数工作,它会请求参数,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);
}
4

5 回答 5

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);
}
于 2009-06-08T06:05:38.730 回答
2

通过直接在浏览器中访问来检查有问题的 URL 是否确实响应。

用不同的浏览器测试你是否得到相同的结果。

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

于 2009-04-15T11:41:17.283 回答
1

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

于 2009-04-15T11:35:12.523 回答
0

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

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

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

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

于 2010-09-09T13:43:21.957 回答
0

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

问题是我的响应将 mime-type 设置为“application/octet-stream”。

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

于 2018-09-01T15:32:27.553 回答