Javascript 在jQuery中,如何等待变量的特定值

Javascript 在jQuery中,如何等待变量的特定值,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个变量 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)

我有一个变量

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);
});

这可能不是最好的方法,但它是有效的

您确实应该优化我编写的代码,但这是为了让您开始

此脚本检查变量是否每10毫秒更改一次


注意:clearInterval()函数用于停止检查。

为此,您应该使用承诺:

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函数

我正在构建一个SafeAjaxing事件,因此工作只能在页面未ajaxing时完成

不要自己建造这个。只需使用内置的,即

  • ajaxStart
    “如果启动了一个Ajax请求而当前没有运行其他Ajax请求,则会触发此事件。”
  • ajaxStop
    “如果不再处理Ajax请求,将触发此全局事件。”

不等待变量中出现值时,可能会出现重复的。相反,直接等待数据。不能。设计是事件驱动的,没有访问直接Ajax调用的权限。如何判断IsAjaxing处于什么状态?具体地说,我如何判断它是否是ajaxing?
IsAjaxing.Off();