【发布时间】:2013-05-12 17:18:00
【问题描述】:
我正在通过 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 发送此消息以确认是否使用缓存版本,但是,尽管先决条件失败,但它不会加载缓存版本。我认为这可能意味着缓存以某种方式损坏,所以我清除了缓存。不幸的是,这并不能解决问题。该文件将愉快地加载一次,但下次我回到我开始处理相同问题的地方。有任何想法吗?
【问题讨论】:
-
您是否从您的服务器明确传递
412。如果您是,您可能会从查看服务器代码中得到一些提示,究竟是什么先决条件失败了?尝试调试您的服务器代码。 -
它正在加载一个静态文件,因此在这种情况下没有服务器代码。我很确定这与服务器无关,否则 Firefox 会遇到同样的问题。
-
不是服务器的问题。服务器如何处理它可能会提供一些关于 chrome 开发工具正在做什么的提示。也许它正在发送一些你的框架(如果你正在使用一个)不能很好地使用的标题。
-
@RobJ 尝试在您的 ajax 方法中显式设置
cache:false以查看是否会改变行为。不过,帖子应该没关系
标签: javascript google-chrome jquery google-chrome-devtools