我使用以下代码通过AJAX提交表单:
$( 'form' ).submit(function(e) {
$.ajax({
type: 'POST',
url: ajax_url,
dataType: 'json',
data: {
'action': 'my_action',
'str': $( 'form' ).serialize()
},
success: function( data ) {
// Do something here.
},
error: function( data ) {
// Do something here.
}
});
return false;
});
背景
我的PHP处理程序执行各种任务,然后发回响应。然后,我可以在成功或错误函数中使用data
执行某些操作。
我的问题
当用户双击表单的提交按钮时,会发生两次AJAX调用,导致我的PHP处理程序中的代码执行两次。
我的问题
如果用户双击提交,我怎样才能避免我的代码被执行两次?
答案 0 :(得分:11)
只需添加一些控制变量:
var isSubmitting = false;
$( 'form' ).submit(function(e) {
if(isSubmitting) {
return;
}
isSubmitting = true;
$.ajax({
type: 'POST',
url: ajax_url,
dataType: 'json',
data: {
'action': 'my_action',
'str': $( 'form' ).serialize()
},
success: function( data ) {
isSubmitting = false;
// Do something here.
},
error: function( data ) {
isSubmitting = false;
// Do something here.
}
});
return false;
});
答案 1 :(得分:5)
当AJAX调用返回时,在第一次单击时禁用提交按钮并重新启用它。
例如:
$( 'form' ).submit(function(e) {
var $form = $(this);
$form.find('submit').attr('disabled', true);
$.ajax({
type: 'POST',
url: ajax_url,
dataType: 'json',
data: {
'action': 'my_action',
'str': $( 'form' ).serialize()
},
complete: function() {
$form.find('submit').removeAttr('disabled');
},
success: function( data ) {
// Do something here.
},
error: function( data ) {
// Do something here.
}
});
return false;
});
答案 2 :(得分:1)
只需隐藏并在提交时显示提交按钮。
$( 'form' ).submit(function(e) {
$('#my_button').hide();
$.ajax({
type: 'POST',
url: ajax_url,
dataType: 'json',
data: {
'action': 'my_action',
'str': $( 'form' ).serialize()
},
success: function( data ) {
// Do something here.
},
error: function( data ) {
// Do something here.
},
complete: function(){
$('#my_button').show();
}
});
return false;
});