我正在通过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工具是否开放会有前提条件?此外,打开和关闭开发工具似乎不太可能以任何方式影响服务器的行为,所以我认为Chrome是阻止请求而不是异常中建议的服务器。
不幸的是,dev工具在关闭时无法跟踪网络活动,因此我无法使用网络选项卡获取任何进一步的信息。
使用以下代码通过JQuery处理AJAX:
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中禁用/启用缓存不会导致任何问题EDIT2:好的,我想我已经接近了。失败的前提条件是if-modified-since条件(文件未更改)。我假设chrome正在发送此信息以确认是否使用缓存版本,但是,尽管前提条件失败,但它不会加载缓存版本。我认为这可能意味着缓存在某种程度上被破坏,所以我清除了缓存。不幸的是,这并没有解决问题。该文件将很乐意加载一次,但下次我回到我开始时遇到同样的问题。有任何想法吗?
答案 0 :(得分:3)
@Rondel - 你知道了!问题是我愚蠢地使用'post'来获取静态文件。邮件请求永远不应该被缓存,这就是Chrome无法检索它的原因。我仍然不知道为什么chrome仍然会发送if-modified-since标头,但无论如何更改请求类型以获取是问题的解决方案(抱歉Crome Dev工具不公平地责怪你 - 问题,像往常一样,是我的代码!)