我正在通过 ajax 加载一个 json 文件。如果 Chrome 开发工具处于打开状态,则一切都可以正常运行。如果关闭 Chrome 开发工具,则会失败。幸好,即使在关闭时,开发工具仍然保持其功能,因此我仍然可以看到我得到的异常:
为什么打开dev tools是前提条件呢?而且,打开或关闭dev tools似乎不可能以任何方式影响服务器的行为,因此我认为是Chrome阻止了请求,而不是像异常中所提到的服务器。遗憾的是,当关闭时,dev tools不会跟踪网络活动,因此我无法使用网络选项卡获取更多信息。AJAX是通过以下代码使用JQuery处理的:
这段代码在Firefox中没有问题,因此似乎与Chrome Dev Tools有关。欢迎提出任何建议,因为我完全不知所措!编辑:好吧,这根本不是开发工具的问题-我已经在开发工具中禁用了缓存,重新启用它可以使脚本正常工作。为什么我的代码依赖于缓存?在Firefox中禁用/启用缓存不会引起任何问题。编辑2:好的,我觉得我接近了答案。失败的前提条件是if-modified-since条件(文件未更改)。我认为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 Alicache:false
,以查看是否会更改行为。但对于Post请求来说,这应该不重要。 - Rondel