我有一个需要通过批处理删除的数据库。如下面的代码所示,根据数据库大小,可以有任意数量的step
(当前批量迭代)。我想将函数redirect_to_homepage()
放在下面的代码中,以便在最后一个批处理之后重定向到新页面。目前,只要response.success
为真,它就会重定向,而我希望它等待delete_all_data()
的所有迭代完成然后重定向。我怎样才能做到这一点?
jQuery.ajax({
url: ajaxurl,
type: 'POST',
data: {
'action': 'deactivation_form_submit',
'form-data': form_data,
}
}).done( function( response ) {
if ( response.success ) {
if ( response.data.delete_data ) {
delete_all_data( 1, form_data );
}
redirect_to_homepage();
}
});
// This is a recursive AJAX function.
function delete_all_data( step, form_data ) {
jQuery.ajax({
url: ajaxurl,
type: 'POST',
data: {
'form': form_data,
'action': 'give_do_ajax_export',
'step': step,
},
dataType: 'json',
}).done( function( response ) {
if ( true !== response.success && ! response.error ) {
delete_all_data( parseInt( response.step ), form_data );
}
});
}
答案 0 :(得分:0)
您可以将redirect_to_homepage()
方法作为回调传递,这将在达到所需条件时执行。
jQuery.ajax({
.....
}).done( function( response ) {
if ( response.success response.data.delete_data ) {
delete_all_data( 1, form_data, redirect_to_homepage ); //Pass function reference
}
});
// This is a recursive AJAX function.
function delete_all_data( step, form_data, cb ) {
jQuery.ajax({
.....
}).done( function( response ) {
if ( true !== response.success && ! response.error ) {
delete_all_data( parseInt(response.step,10), form_data, cb); //Pass function reference
}else{
//At present assuming this
//Invoke the callback function
cb();
}
});
}
答案 1 :(得分:0)
一个选项是对你的delete_all_data
ajax调用使用同步ajax调用
function delete_all_data( step, form_data ) {
jQuery.ajax({
url: ajaxurl,
async:false,
type: 'POST',
data: {
'form': form_data,
'action': 'give_do_ajax_export',
'step': step,
},
dataType: 'json',
}).done( function( response ) {
if ( true !== response.success && ! response.error ) {
delete_all_data( parseInt( response.step ), form_data );
}
});
}
这将停止执行重定向,直到执行delete_all_data
的最后一次调用。
其他选项如果你不想使用同步调用,那么我们将函数作为函数如下
function delete_all_data( step, form_data ) {
jQuery.ajax({
url: ajaxurl,
async:false,
type: 'POST',
data: {
'form': form_data,
'action': 'give_do_ajax_export',
'step': step,
},
dataType: 'json',
}).done( function( response ) {
if ( true !== response.success && ! response.error ) {
if(response.step != last) {/// check if this is not the last step
delete_all_data( parseInt( response.step ), form_data );
}
else{
////// Your redirection code goes here (function call or direct window.location.href)
}
}
});
}
告诉我们是否有帮助