我正在通过 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 发送此消息以确认是否使用缓存版本,但是,尽管先决条件失败,但它不会加载缓存版本。我认为这可能意味着缓存以某种方式损坏,所以我清除了缓存。不幸的是,这并不能解决问题。该文件将愉快地加载一次,但下次我回到我开始处理相同问题的地方。有任何想法吗?