【问题标题】:jQuery Ajax Success callback firing without making a requestjQuery Ajax Success回调触发而不发出请求
【发布时间】:2013-07-23 15:06:56
【问题描述】:

我有一个如下所示的 AJAX 请求:

$.get('api/indicator/status_graph/'+self.indicator.get('id'), function(data) {
    self.actuals_graph(data);
    self.graphLoaded(true);
    self.graphError(false);
}).error(function(data) {
    self.graphError(true);
});

老实说,这是一个童话般的简单请求,并且在页面的另一个位置重复出现。我遇到的问题是在调用 get 函数后立即调用成功回调; Chrome 的网络面板显示根本没有向服务器发出请求。一段在其他地方调用的几乎相同的代码可以正常工作,而且由于调用它们的方式或时间没有区别,老实说,我无法弄清楚发生了什么。

【问题讨论】:

  • 这很奇怪。而且可能是不可能的。您是否在代码中添加了任何断点?
  • .error 已弃用 - 请改用 .fail。
  • @Neal 是的,我做到了——这就是我发现它立即进入回调函数而不是发出请求的方式。当我检查变量时,我发现传递给数据变量的所有内容都是一个空字符串(“”),没有实际内容。
  • @moberemk 你没有传递任何数据...
  • @Neal 数据应该来自 response

标签: jquery ajax google-chrome


【解决方案1】:

我最近遇到了同样的问题:触发了成功回调,响应数据是一个空字符串,开发者工具中不会显示任何请求,也没有请求会到达网络服务器。和你一样,我认为这不是缓存问题,因为在任何地方都没有显示请求的证据(即使是缓存的)。

但是,我尝试将 ajax() 调用的 cache 参数设置为 false 并在原始服务器回复上设置各种无缓存标头(在 Django 中,使用 @never_cache 装饰器),问题似乎已解决。两天后,这个问题再也没有出现过。

【讨论】:

  • 我很高兴我并不孤单。但说真的,这可能是我在这方面得到的最好建议,谢谢!
【解决方案2】:

请求/响应很可能已被缓存。查看您的调试器进行验证。

【讨论】:

    【解决方案3】:

    您能否运行类似于 Fiddler 的程序来查看您的请求是否确实被发送?另外,您说成功回调在调用 GET 后立即触发 - 返回到您的成功回调的数据是否合适?

    一种可能性是 chrome 正在预先缓存您的请求。您确实提到了另一段代码进行了几乎相同的调用-实际上是否相同?还是关闭?

    【讨论】:

    • 我检查的第一件事是缓存,但是当我说网络面板中没有出现任何内容时,我的意思是什么都没有——根本没有发出请求,也没有迹象表明它是由缓存处理的.其他代码几乎相同,它们遵循相同的基本逻辑,但设置了不同的变量并调用了不同的 URL。
    • @moberemk 如果您仅过滤某些未显示的 xhr 请求,则 chrome 调试器会出现故障。单击任何其他过滤器,而不是返回 xhr 将使它们出现。
    • @BradM 很高兴知道,但这没有任何过滤器;我列出了所有请求,包括 CSS 文件等资源请求,但它仍然没有显示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2012-11-13
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    相关资源
    最近更新 更多