2013-05-17 75 views
4

我正在通过ajax加载json文件。如果Chrome开发工具是开放的,那么所有功能都可以完美实现如果Chrome开发工具关闭,则失败。值得庆幸的是开发工具仍然保持做它的事情,即使在关闭时,所以我仍然可以看到异常,我得到:如果chrome开发工具打开AJAX,但是如果chrome web工具关闭,AJAX将无法工作?

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浏览器开发工具。任何建议欢迎,因为我完全flummoxed!

编辑:好,所以它不是开发工具的错误 - 我已经禁用开发工具中的缓存,重新启用它允许脚本正常工作。为什么我的代码依赖于缓存?在Firefox中禁用/启用缓存不会导致任何问题编辑2:好吧,我想我越来越接近了。失败的先决条件是if-modified-since条件(文件没有改变)。我认为chrome发送这个来确认是否使用缓存版本,但是,尽管前提条件失败,它不会加载缓存版本。我认为这可能意味着缓存已被破坏,所以我清除了缓存。不幸的是,这并不能解决问题。该文件将愉快地加载一次,但在下次我回到我开始处理同一问题时。有任何想法吗?

+0

你是否明确地从你的服务器传递'412'。如果你是从看服务器代码中得到一些提示,那究竟是什么前提失败?尝试调试您的服务器代码。 –

+0

它正在加载一个静态文件,所以在这种情况下没有服务器代码。我相当确定这与服务器无关,否则Firefox会遇到同样的问题。 –

+0

它不是问题出在服务器上。服务器如何处理它可能会给出关于chrome开发工具正在做什么的一些线索。也许它是发送一些头部,你的框架(如果你使用的)不能很好地发挥。 –

回答

3

@Rondel - 你明白了!问题在于我愚蠢地使用'post'来获取静态文件。发布请求永远不会被缓存,因此Chrome不会检索它。我仍然不知道为什么chrome仍然发送if-modified-since标题,但无论如何改变请求类型以获得问题的解决方案(对不起,Crome开发工具不公正地指责你 - 问题一如既往,是我的代码!)

+0

啊,这对于帖子应该不重要。很高兴你了解它的底部。 – Rondel