我有一个变量
var IsAjaxing;
每次在页面上触发ajax时,我都将其设置为true。然后在ajax完成时将其设置为false;
我正在构建一个SafeAjaxing事件,所以只有在页面不是ajaxing时才能完成工作:
// safe-ajaxing: Triggers when no ajax is running
$($fieldRenderPageDOM).on("safe-ajaxing", '.field-render', function(e, work) {
$.when({ IsAjaxing: false }).done(work);
});
这似乎没有等待,工作总是立即被调用。
它将被称为:
$fieldDOM.trigger("safe-ajaxing", function () {
$fieldDOM.trigger("do-work");
$fieldDOM.trigger("do-some-more-work);
});
答案 0 :(得分:1)
你应该为此目的使用承诺:
var IsAjaxing = function(){
var defer = $.Deferred().resolve();
return {
On: function(){
defer = $.Deferred();
},
Off: function(){
defer.resolve();
},
Promise: function() {
return defer.promise();
},
IsOn: function() {
return defer.state() == "pending";
},
IsOff: function() {
return defer.state() != "pending";
}
};
}();
然后你的活动将是:
// safe-ajaxing: Triggers when no ajax is running
$($fieldRenderPageDOM).on("safe-ajaxing", '.field-render', function(e, work) {
$.when(IsAjaxing.Promise()).done(work);
});
每次启动ajax请求时都会运行:
IsAjaxing.On();
每次完成ajax运行时:
IsAjaxing.Off();
要检查IsAjaxing的当前状态,请调用IsOn和IsOff函数。
答案 1 :(得分:0)
这可能不是最好的方法,但它有效。
你真的应该优化我编写的代码,但这是为了让你开始。
var isAjaxing = false;
var check = function(){
if(isAjaxing){
// do something
alert();
// freeze the checking
// manual restart is required
clearInterval(interval);
}
}
var interval = setInterval(check, 10);
// to demonstrate the variable change
setInterval(function(){
isAjaxing = true;
}, 3000);
此脚本检查变量是否每10毫秒更改一次。
注意:clearInterval()函数用于停止检查。
答案 2 :(得分:0)
我正在构建一个SafeAjaxing事件,所以只有当页面不是ajax时才能完成工作。
不要自己构建这个。只需使用内置ajax events of jQuery,即
ajaxStop
" 如果启动了Ajax请求并且当前没有其他Ajax请求正在运行,则会触发此事件。" std::unique_ptr
" 如果没有更多的Ajax请求被处理,则会触发此全局事件。"