我正在通过 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
为什么会有开发工具是否开放的前提条件?另外,打开和关闭开发工具似乎不太可能以任何方式影响服务器的行为,因此我认为是 Chrome 阻止了请求,而不是异常中建议的服务器。
不幸的是,开发工具在关闭时不会跟踪网络活动,因此我无法使用网络选项卡来获取任何进一步的信息。
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 开发工具相关。欢迎任何建议,因为我完全困惑了!
编辑:好的,所以这根本不是开发工具的错误 - 我已经禁用了开发工具中的缓存,重新启用它可以使脚本正常工作。为什么我的代码依赖于缓存?在 Firefox 中禁用/启用缓存不会导致任何问题
EDIT2:好的,我想我已经接近了。失败的前提条件是 if-modified-since 条件(文件未更改)。我假设 chrome 发送此消息是为了确认是否使用缓存版本,但是,尽管前提条件失败,但它不会加载缓存版本。我认为这可能意味着缓存以某种方式损坏,所以我清除了缓存。不幸的是,这并不能解决问题。该文件会很高兴地加载一次,但下次我又回到开始时遇到同样的问题。有任何想法吗?