当第一次加载页面时,Opera会发出两次ajax请求

时间:2012-11-07 15:24:32

标签: javascript ajax jquery opera

我在歌剧中遇到了一个小问题。我无法在其他浏览器中复制此内容。

我有一个正在加载的页面。一旦页面加载,使用JavaScript我发出一个ajax请求以json格式加载一些信息(我使用的是jQuery)。
问题是opera会两次发出ajax请求。在歌剧蜻蜓,它告诉我它只提出了1个请求,但我的http服务器说不同。

请求的页面是这样的:http://localhost/session&_=1352301441410,其中最后一个数字是随机的。

我还添加了以下响应标头:

Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Wed, 07 Nov 2012 15:17:22 GMT
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache

我认为问题与缓存有关,因为只有在第一次加载页面或清除缓存时才会出现这种情况。
我正在使用最新的歌剧:Opera 12.10

在其他浏览器上,一切正常。

1 个答案:

答案 0 :(得分:0)

我前段时间在Chrome上发现了类似的问题。它调用相同的函数两次(但它在调试器的时间轴中只显示一次。为了解决它,我使用了一个函数被调用时设置为1的变量,并在完成时设置为0。当然,如果变量是1,则不会调用该函数。调用该函数的代码片段为:

if (security_var == 0)
{
  security_var = 1;
  function_whatever();
}
else
{
  alert('Function called while variable is 1');
}

虽然函数将是这样的:

function function_whatever()
{
  //the code bla bla bla
  //.....

  security_var = 0;
}

请记住,如果你的函数还有其他方法可以退出,你也应该把security_var = 0;放在那里:)这不是避免问题的最佳方法(例如,你的函数应该因任何原因而结束) ,您可能会发现自己无法再次启动它,因为该变量设置为1),但它可以用于测试目的;警报可让您验证它。