【问题标题】:One entry point for all ajax callbacks for a particular call in javascriptjavascript 中特定调用的所有 ajax 回调的一个入口点
【发布时间】:2013-12-17 14:50:57
【问题描述】:

在我的单页浏览器应用程序中使用 javascript 与服务器通信时,我想提供一个回调函数,无论结果是成功还是某种错误,该函数始终在服务器回复后调用。

我需要这个的两种情况:

1) 我想在等待服务器响应时禁用“保存”按钮,并在服务器响应错误或成功后再次启用它。

2) 我有一个轮询机制,当服务器由于某种原因响应缓慢时,我想防止调用堆栈 - 我想等待一个轮询调用完成,然后再进行下一个。

我现在拥有的一个解决方案是确保两个函数(成功和错误)作为选项在一个长方法链中传递,这感觉像是一个脆弱而繁琐的解决方案(伪代码):

  function doCall() {
    framework1.callit({success : myCallback, error : myCallback})
  };

  framework123.callit = function(options) {
    options = options || {};
    if (options.error) {
      var oldError = options.error;
      options.error = function(errorStuff) {
        // callit error stuff
        oldError(errorStuff);
      } else {
        // callit error stuff
      }
    generalCallFunction(options);
  }

  function generalCallFunction(options) {
    options = // ... checking success and error once again to get general success and error stuff in there, plus adding more options
    ajax( blah, blah, options);
  }

我还有一个主干解决方案,我在其中以与上述类似的方式侦听同步事件和错误回调。

我总是害怕错误或成功函数会在途中丢失,整个过程很难跟上。

有什么框架或模式可以让这些东西尽可能简单吗?无论结果是错误还是成功,总有一些事情总是应该发生的,这很奇怪吗?

【问题讨论】:

  • 在任何人回答之前使用jQuery.. jQuery 内置了很多您的要求。就像全局错误处理和在请求完成/失败后总是执行一个函数。
  • 我不完全确定你想要做什么,但$.ajaxSetup({success: function() {}}); 会做你想做的事吗?

标签: javascript ajax backbone.js callback polling


【解决方案1】:

您可以使用jQuery.ajax({ details here... ).always(callback);

或者,在主干中

// logic to create model here
model.fetch().always(callback);

【讨论】:

  • 很好 - 这至少可以消除成功/错误冗余。我需要破解骨干才能让 always() 在那里,但在其他情况下它应该可以正常工作。
  • 不用等待,backbone 的 fetch 调用返回的似乎是 xhr 对象!嗯,这可能会很好......
  • 基于此做了一个解决方案,似乎效果很好。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 2017-05-24
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 2011-06-26
相关资源
最近更新 更多