在Chrome中只有在打开开发者工具后JavaScript才能正常工作。

5

我遇到了与这里相同的问题,不同的是我的浏览器是Chrome 44。

JavaScript代码(主要包括XHR和setInterval)只有在开发者工具打开时才能完美运行(可能只是XHR的问题)。

这是一个Web应用程序,即一个弹出窗口,宽度为300像素,并且位于用户当前正在使用的任何内容旁边。

这里的解决方案:如果Chrome的开发者工具打开,则AJAX可以正常工作,但如果关闭Chrome Web工具则无法正常工作?似乎不适用于我,因为我正在使用POST发送动态文件。

有什么想法吗?:-)

编辑: 正如@michaelAdam所指出的那样,大部分问题都是缓存问题,因为我使用了相当多的XHR 'get'(这是没有被缓存的)。 嗯...有趣的是:

$.ajaxSetup({ cache: false });

似乎没有起到作用。 添加: @Mattisdada:

header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");//Dont cache
header("Pragma: no-cache");//Dont cache
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");//Make sure it expired in the past (this can be overkill)

防止Chrome缓存AJAX请求

看起来似乎可以解决问题——到目前为止...


2
你的旧代码是否被缓存了,并且在设置中勾选了“在开发者工具打开时禁用缓存”? - michaelAdam
2
你真的应该定义一下你所说的“工作”,并解释清楚它不起作用的具体原因。它应该做什么?目前它的运行状况如何? - musefan
似乎是onload问题。如果控制台中有任何错误以及您感觉不起作用的一些代码片段,请提供。 - Jai
1
@NamiNam,根据提问方式,很难得到答案,但是如果你能够发布你的代码,那么我们可能就能找出xhr调用出现问题的原因。 - Jai
1
@NamiNam 这里 michaelAdam 的建议中 (在 DevTools 打开的情况下) 部分很重要。可能存在一种竞争条件,只有在进行缓存时才会出现。也许可以尝试在开发者工具中关闭该选项,看看是否仍然能够复现问题? - Katana314
显示剩余5条评论
1个回答

1
你需要为jQuery AJAX设置cache: false,这样响应数据就不会被浏览器缓存。另一个技巧是(如果有人不使用jQuery),通过发送一些唯一值作为参数(例如new Date().getTime())来使URL变得唯一。
示例:
$.ajax({
    url: 'http://someurl', 
    cache: false, 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接