我正在尝试在jQuery的ajaxComplete中设置一个值,并在promise完成时请求该值。我遇到的问题是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结合使用。
答案 0 :(得分:1)
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
});