2

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

我有一个正在加载的页面。加载页面后,我使用 JavaScript 发出 ajax 请求以 json 格式加载一些信息(我使用的是 jQuery)。
问题是歌剧两次发出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

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

4

1 回答 1

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),但它可以用于测试目的;警报可让您验证它。

于 2012-11-12T18:46:43.723 回答