在返回结果之前,我如何等待 jQuery.ajaxComplete in promise.done

How can I wait for jQuery.ajaxComplete within promise.done before returning a result?

本文关键字:等待 jQuery ajaxComplete done promise in 何等待 结果 返回      更新时间:2023-09-26

我正在尝试在jQuery的ajaxComplete中设置一个值,并在承诺完成时请求该值。 我遇到的问题是jQuery的ajaxComplete在promise.done之后运行。

$(document).ajaxComplete(function (e, jqXhr) {
    // Set a value here
});
var promise = $.post(url,{});
promise.done(function(){
    // Ask for the value here, but wait on ajaxComplete before returning it
});

有没有办法将值的返回推迟到jQuery的ajaxComplete完成后? 我已经查看了jQuery的延迟方法,但我不确定如何将其与ajaxComplete结合使用。

ajaxComplete没有

为这种情况提供钩子。解决延迟,事件将始终触发。我们可以在源代码中看到它:

// Complete
completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);
if (fireGlobals) {
    globalEventContext.trigger("ajaxComplete", [jqXHR, s]);
    // Handle the global AJAX counter
    if (! (--jQuery.active)) {
        jQuery.event.trigger("ajaxStop");
    }
}

您必须自己实现它,例如,通过额外的超时来延迟then处理程序的执行:

 function defer(val){
     var d = $.Deferred();
     setTimeout(function(){ d.resolve(val); }, 0);
     return d.promise();
 }

这意味着:

var promise = $.post(url, {}).then(defer);
promise.done(function(){
   // all here
});