我在OS X上遇到了当前版本的Google Chrome(44.0.2403.157)的奇怪行为。
当我使用方法GET执行AJAX(XHR)请求时,我的Chrome 有时会发出1个请求,有时会发出2个(!)。
我的代码:
var jsUrl = 'http://www.some-domain.com/xy.js';
var ajax = new XMLHttpRequest();
ajax.withCredentials = true;
ajax.open( 'GET', jsUrl, true ); // async, because sync cannot be send with cookies
ajax.onreadystatechange = function () {
var script = ajax.response || ajax.responseText;
if (ajax.readyState === 4) {
switch( ajax.status) {
case 200:
case 304:
eval.apply( window, [script] );
// no break on purpose here
default:
someFunction();
}
}
};
ajax.send(null);
当我发出2个请求时,我的开发者控制台的屏幕截图:
服务器日志确认正在发出第二个请求 - 它不仅仅在控制台中。
第二个请求的标题实际上与第一个请求的标题相同 - 唯一的区别是在上面的屏幕上使用第3个请求更改的cookie的值。
请注意,OS X 上的当前版本的Firefox(40.0.3)不会显示此行为 - 每次只有1个请求(通过使用Firebug观看请求进行测试(带有显示BFCache请求并通过观察服务器日志)。
有一段时间我认为使用send()
vs send(null)
会产生影响 - 使用send()
时只会发出一个请求 - 但经过更多测试后,我发现奇怪的是提供两种语法。
你能否告诉我这里发生的事情?