我遇到问题,httpReq.responseText
在Chrome {33.0.1750.149 m} readyState
为4
后为空console.log(url)
。当我在readyState
行进行调试并停止时, 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);
是一个空字符串,并在“网络”选项卡中查看,Chrome在“响应”部分显示了一个空的响应。没有什么可以令人惊讶的。
令人惊讶的是,只要我让javascript从该断点继续,“网络”选项卡就会填充响应部分。我知道我的服务器确实返回了数据,而url来自同一个域(localhost)。当我在firefox中测试时,它运行正常。
我的代码如下所示:
.open
有什么想法可能会发生什么?
更新:如果我将httpReq.open('GET', url, false);
电话更改为onreadystatechange
则可行。 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中的错误吗?
更新:我对此进行了最低限度的重复。我的代码中有两个独立的ajax函数(一个来自我无法控制的模块)。其中一个似乎在做一个同步的http请求。这是一个复制品:
{{1}}
现在我很清楚这是Chrome中的一个错误。我会随身携带一张票。
答案 0 :(得分:0)
这是Chrome中的一个错误。有关详细信息,请参阅票证:
https://code.google.com/p/chromium/issues/detail?id=368444&thanks=368444&ts=1398808430