为什么Chrome有时会产生2个AJAX请求而不是1个?

时间:2015-08-30 17:43:16

标签: javascript ajax google-chrome

我在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个请求时,我的开发者控制台的屏幕截图:

my developer console showing 2 requests

服务器日志确认正在发出第二个请求 - 它不仅仅在控制台中。

第二个请求的标题实际上与第一个请求的标题相同 - 唯一的区别是在上面的屏幕上使用第3个请求更改的cookie的值。


请注意,OS X 上的当前版本的Firefox(40.0.3)不会显示此行为 - 每次只有1个请求(通过使用Firebug观看请求进行测试(带有显示BFCache请求并通过观察服务器日志)。


有一段时间我认为使用send() vs send(null)会产生影响 - 使用send()时只会发出一个请求 - 但经过更多测试后,我发现奇怪的是提供两种语法。


你能否告诉我这里发生的事情?

0 个答案:

没有答案