【发布时间】:2018-01-15 07:41:28
【问题描述】:
我的应用程序有一堆 $.ajax 调用,其中大部分具有 .done 和 .fail 函数。
我想为 Ajax 调用编写一个包装器,这样如果一个函数没有 .fail 函数,或者如果 .fail 函数没有处理给定的错误(例如它只处理 404,但我得到一个 403),然后我希望包装器将其作为后备处理。
这是我写的:
function DoAjax(fn, errorText) {
var deferred = $.Deferred();
var result = fn();
if (result === undefined)
throw 'Function passed into DoAjax has not returned a promise.';
result.always(function () {
deferred.resolve(result);
});
result.fail(function () {
alert('fail');
deferred.fail();
});
return deferred.promise();
}
它主要按照我的意图工作,除了失败将执行两次 - 一次在方法 DoAjax 中,另一个在 Ajax 调用的位置。
我这样执行DoAjax:
DoAjax(function () {
var ajaxCall = $.ajax({
method: "GET",
url: baseUrl + "api/test"
});
ajaxCall.fail(function() { alert('failed the call'); });
return ajaxCall;
});
我相信我可以通过手动创建一个 $.deferred 然后围绕它进行 $.ajax 调用来实现这一点,但我宁愿没有另一个包装器。
我正在使用 jQuery 2.2。
【问题讨论】:
-
您使用的是什么版本的 jQuery?是 3+ 吗?
-
@charlietfl 2.2 如果需要可以升级
标签: javascript jquery ajax promise