我需要在页面上已经运行的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;
}
});
});
}
});
});
答案 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