【问题标题】:AJAX works if chrome dev tools open but not if chrome web tools closed?如果 chrome 开发工具打开,AJAX 可以工作,但如果 chrome web 工具关闭,AJAX 不能工作?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 2015-06-03
    • 2021-03-08
    • 2018-05-28
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多