gpt4 book ai didi

javascript - Chrome XMLHttpRequest readState===4 返回空的responseText

转载 作者:行者123 更新时间:2023-11-28 08:18:01 25 4
gpt4 key购买 nike

我遇到了一个问题,在 Chrome(版本 33.0.1750.149 m)中,readyState4 后,httpReq.responseText 为空。当我调试并停止在 console.log(url) 行时,readyState 是一个空字符串,并且在“网络”选项卡中查看,chrome 在网址的“响应”部分。没什么奇怪的。

令人惊讶的是,一旦我让 javascript 从该断点继续执行,“网络”选项卡就会填充响应部分。我确定我的服务器正在返回数据,并且 url 来自同一域 (localhost)。当我在firefox中测试时,它工作正常。

我的代码如下所示:

    var httpReq = new XMLHttpRequest();

httpReq.onreadystatechange = function() {
if( httpReq.readyState === 4 ) {
if( httpReq.status === 200 ) {
console.log(url)
result.return(httpReq.responseText)
} else {
if(!result.isResolved)
result.throw(new Error('Error in request'))
}
}
}

httpReq.open('GET', url, true);
httpReq.send(null);

有什么想法可能会发生什么吗?

更新:如果我将 .open 调用更改为 httpReq.open('GET', url, false); 它可以工作。 onreadystatechange 函数肯定出了问题 - 这是 chrome 中的错误吗?

更新:我对此做了一个最小的重现。我的代码中有两个独立的 ajax 函数(其中一个来 self 无法控制的模块)。其中之一似乎正在执行同步 http 请求。这是一个重现:

var url = '/'
var httpReq = new XMLHttpRequest();
var httpReq2 = new XMLHttpRequest();

httpReq.onreadystatechange = function() {
console.log('a '+httpReq.readyState+":"+httpReq.status+' - '+httpReq.responseText.substring(0,40))
};
httpReq2.onreadystatechange = function() {
console.log('b '+httpReq.readyState+":"+httpReq.status+' - '+httpReq.responseText.substring(0,40))
};

httpReq.open('GET', url ); // asynchronous *first*
httpReq.send();
httpReq2.open('GET', url, false); // synchronous *second*
httpReq2.send();

现在我很清楚这是 chrome 中的一个错误。我将向他们提交票据。

最佳答案

这是 Chrome 中的一个错误。详情请参阅门票:

https://code.google.com/p/chromium/issues/detail?id=368444&thanks=368444&ts=1398808430

关于javascript - Chrome XMLHttpRequest readState===4 返回空的responseText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23374656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com