Chrome开发工具打开时AJAX可以正常工作,但关闭Chrome Web工具后无法正常工作?

5
我正在通过 ajax 加载一个 json 文件。如果 Chrome 开发工具处于打开状态,则一切都可以正常运行。如果关闭 Chrome 开发工具,则会失败。幸好,即使在关闭时,开发工具仍然保持其功能,因此我仍然可以看到我得到的异常:
Failed to load resource: the server responded with a status of 412 (Precondition Failed) http://localhost/experiments/escape/maps/test.json

为什么打开dev tools是前提条件呢?而且,打开或关闭dev tools似乎不可能以任何方式影响服务器的行为,因此我认为是Chrome阻止了请求,而不是像异常中所提到的服务器。遗憾的是,当关闭时,dev tools不会跟踪网络活动,因此我无法使用网络选项卡获取更多信息。AJAX是通过以下代码使用JQuery处理的:
map.load = function(mapName, tileSource, tileWidth, tileHeight, onLoad) {
    $.ajax({
        url: '../escape/maps/'+mapName+'.json',
        type: 'post',
        success: function(mapData) {
            // there's loads of stuff in here but I don't think it's relevant to the question as the failure prevents the success method from being called.
        }
    });
};

这段代码在Firefox中没有问题,因此似乎与Chrome Dev Tools有关。欢迎提出任何建议,因为我完全不知所措!编辑:好吧,这根本不是开发工具的问题-我已经在开发工具中禁用了缓存,重新启用它可以使脚本正常工作。为什么我的代码依赖于缓存?在Firefox中禁用/启用缓存不会引起任何问题。编辑2:好的,我觉得我接近了答案。失败的前提条件是if-modified-since条件(文件未更改)。我认为chrome会发送这个条件来确认是否使用缓存版本,但是,尽管前提条件失败,它并没有加载缓存版本。我以为这可能意味着缓存在某种程度上被破坏了,所以我清除了缓存。不幸的是,这并不能解决问题。文件将愉快地加载一次,但下一次我又回到了同样的问题。有什么想法吗?

你是否明确地从服务器传递了412?如果是的话,可以通过查看服务器代码来获得一些提示,了解到底是哪个前提条件失败了。尝试调试你的服务器代码。 - Juzer Ali
它正在加载一个静态文件,因此在这种情况下没有服务器代码。我相当确定这与服务器无关,否则Firefox也会遇到同样的问题。 - Rob Johnstone
问题不在服务器上。服务器如何处理它可能会提供一些线索,以了解 Chrome 开发工具正在做什么。也许它正在发送某些头文件,而您的框架(如果您正在使用一个)可能无法很好地处理它们。 - Juzer Ali
5
尝试在您的AJAX方法中明确设置 cache:false,以查看是否会更改行为。但对于Post请求来说,这应该不重要。 - Rondel
1个回答

3

@Rondel - 你说对了!问题在于我傻乎乎地使用“post”来获取静态文件。Post请求从来不应该被缓存,这就是为什么Chrome不会检索它的原因。我仍然不知道为什么Chrome仍然发送if-modified-since头,但无论如何,将请求类型更改为get是解决问题的方法(抱歉Chrome开发工具,我误怪了你 - 像往常一样,问题在于我的代码!)


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