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

问题是(我想出了什么)-发出(初始化)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;

                        }

                    });

                });

            }
    });

});

最佳答案

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

关于javascript - 仅执行一次completeAjax,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33237285/

10-10 02:43