【发布时间】: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