仅执行一次completeAjax

时间:2015-10-20 12:56:54

标签: javascript jquery ajax

我需要在页面上已经运行的ajax完成时触发一个函数。我想要更新的功能将更新wishlist项目计数器,而之前运行的功能会将项目保存在心愿单中。

问题是(我已经想到了) - 在等待成功msg之后进行(初始化)ajax请求之后,该函数再次自行执行。

总而言之,我希望ajaxComplete函数部分只运行一次。请指出我正确的方向

jQuery(document).ready( function() {

    var token = false;

    jQuery( '.add_to_wishlist' ).on( 'click', function() {

            if( token == false ) {

                jQuery(document).ajaxComplete(function() {

                    console.log('Entered Click!');

                    token = true;

                    jQuery.ajax({

                        url: wishajax.ajax_url,
                        data: {
                            action: 'vg_inject_wish',
                        },
                        success: function( response ) {

                            console.log('Entered Success!');

                            jQuery( '.wishlist-container' ).html( response );

                            console.log('After Success!');

                            token = true;

                        }

                    }); 

                });

            }
    });

});

2 个答案:

答案 0 :(得分:1)

jQuery(document).ajaxComplete是一个独立的event。为什么要在click事件中将其组合并再次在其中写jQuery.ajax?将问题分开如下:

jQuery(document).ajaxComplete(function() {
    token = true;//If you need this only in success then no need to put it here as this 
    //will get executed irrespective of ajax result
});

jQuery( '.add_to_wishlist' ).on( 'click', function() {
    if( token == false ) {
          jQuery.ajax({
                 url: wishajax.ajax_url,
                 data: {
                      action: 'vg_inject_wish',
                 },
                 success: function( response ) {
                      console.log('Entered Success!');
                      jQuery( '.wishlist-container' ).html( response );
                      console.log('After Success!');
                      token = true;
                 }
           }); 
    }
});

答案 1 :(得分:0)

也许这可以帮助你

    function once(fn, context) { 
    var result;

    return function() { 
        if(fn) {
            result = fn.apply(context || this, arguments);
            fn = null;
        }

        return result;
    };
}

// Usage
var canOnlyFireOnce = once(function() {
    console.log('Fired!');
});

canOnlyFireOnce(); // "Fired!"
canOnlyFireOnce(); // nada

取自blog of David Walsh