我需要使用ajaxStop函数调用ajax来呈现新的html元素,但是在ajax函数finsihed之后,ajax一遍又一遍地重复,我只需要在ajaxStop函数内运行一次ajax。 jQuery代码:
$(document).ajaxStop(function () {
$.ajax({
type: 'post',
url: url.build('test/payment/getmethod'),
cache: false,
showLoader: true,
method: "POST",
success: function(data) {
if(data!='') {
var htm ='';
htm += '<div class="payment-method-billing-address">';
$.each(data , function(i, method) {
htm += '<input type="radio" class="required" name="snap-method" value='+method.value+'">'+method.label+'<br>';
});
htm += '</div>';
$( htm ).insertBefore( ".checkout-agreements-block" );
}
return false;
}
})
return false;
});
答案 0 :(得分:2)
var callAjax= true;
$(document).ajaxStop(function () {
if (callAjax){
$.ajax({
type: 'post',
url: url.build('test/payment/getmethod'),
cache: false,
showLoader: true,
method: "POST",
success: function(data) {
if(data!='') {
var htm ='';
htm += '<div class="payment-method-billing-address">';
$.each(data , function(i, method) {
htm += '<input type="radio" class="required" name="snap-method" value='+method.value+'">'+method.label+'<br>';
});
htm += '</div>';
$( htm ).insertBefore( ".checkout-agreements-block" );
}
callAjax = false;
return false;
}
});
}
return false;
});
在需要停止调用您的函数时标记它。就在那里,我刚刚添加了成功方法。但是如果你只需要做一次,你可能不需要ajaxStop?
答案 1 :(得分:0)
如documentation所述,您可以与global: false
进行AJAX通话,以便不会触发ajaxStop
事件。
$(document).ajaxStop(function () {
$.ajax({
type: 'post',
url: url.build('test/payment/getmethod'),
cache: false,
showLoader: true,
global: false,
method: "POST",
success: function(data) {
if(data!='') {
var htm ='';
htm += '<div class="payment-method-billing-address">';
$.each(data , function(i, method) {
htm += '<input type="radio" class="required" name="snap-method" value='+method.value+'">'+method.label+'<br>';
});
htm += '</div>';
$( htm ).insertBefore( ".checkout-agreements-block" );
}
return false;
}
})
return false;
});
但你应该考虑使用promises来抓住你以前的所有请求都已完成。