【问题标题】:Backbone's success callback called before jquery's ajaxSuccess在 jquery 的 ajaxSuccess 之前调用 Backbone 的成功回调
【发布时间】:2015-06-17 19:34:14
【问题描述】:

我想确保在 Backbone 成功之前调用 jQuery 的 ajaxSuccess 回调,而我的经验并非如此。我想要这个

someModel.fetch({ success: function() {
  console.log('2');
} });

$(document).ajaxSuccess(function(event, xhr, ajaxOptions) {
  console.log('1');
});

记录1, 2 而不是2, 1。原因是我使用ajaxSuccess 来预过滤响应并保存Backbone 回调中所需的数据

【问题讨论】:

  • 异步与同步。
  • Backbone 建立在 jquery 之上 我想知道是否有办法覆盖一些回调机制。另外,两者似乎都是异步机制...
  • 如果 .fetch 产生一个 jQuery ajax 请求,那么您看到的是 jQuery 全局事件的预期行为。全局事件总是发生在为特定请求定义的 事件之后。我认为您使用了错误的工具来完成这项工作,jQuery 有其他方法可以连接和操作 ajax 请求的结果。例如转换器。

标签: jquery ajax backbone.js callback


【解决方案1】:

您所显示的不一定意味着 Backbone 调用早于 ajax 成功回调。可能是先调用ajax成功。然后立即调用主干回调。那么这取决于哪个更快,更快的将首先记录。

这意味着在 ajaxsuccess 完成后不调用主干回调。

在您的情况下,您希望在传递到模型之前预处理 ajax 内容。这是很常见的。事实上,Backbone 确实对此提供了原生支持。检查 Backbone.parse 方法。它默认为空,但您当然可以修改它以更改响应。

【讨论】:

  • 酷,我认为它可以得到最好的! (我希望有一个更广泛的解决方案,也可以拦截非骨干 ajax 回调)谢谢!
【解决方案2】:

在获取成功后,尝试将要执行的代码放入 setTimeout 0 中。

这应该在其他事情运行后立即执行。

注意,我更喜欢按照 evilsanta 的建议使用 parse。这更多的是关于您可以做的事情,而不是必须做的事情。

【讨论】:

    猜你喜欢
    • 2017-01-15
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    相关资源
    最近更新 更多