use*_*079 12 javascript ajax jquery
我有一个ajax电话
$('#button1').on('click', function(e){
$.ajax({
url: url,
type: 'POST',
async: true,
dataType: 'json',
enctype: 'multipart/form-data',
cache: false,
success: function(data){
},
error: function(){}
});
e.stopImmediatePropagation();
return false;
});
Run Code Online (Sandbox Code Playgroud)
现在,在10分钟后收到回复.所以ajax调用被多次调用.为什么会发生这种情况/我们如何才能确保只调用一次ajax调用?
dav*_*ave 31
禁用按钮的替代方法是使用.one()方法并在回调后重新绑定事件处理程序:
var clickHandler = function(e){
$.ajax({
url: url,
type: 'POST',
async: true,
dataType: 'json',
enctype: 'multipart/form-data',
cache: false,
success: function(data){
$('#button1').one('click', clickHandler);
},
error: function(){}
});
e.stopImmediatePropagation();
return false;
}
$('#button1').one('click', clickHandler);
Run Code Online (Sandbox Code Playgroud)
我面临着同样的问题,当我设置时它可以工作async: false。示例代码将如下所示
$('#button1').on('click', function(e){
$.ajax({
url: url,
type: 'POST',
async: false,
dataType: 'json',
enctype: 'multipart/form-data',
cache: false,
success: function(data){
},
error: function(){}
});
});
Run Code Online (Sandbox Code Playgroud)
只需.off()在您致电之前立即致电.on()。
这将删除所有事件处理程序:
$(element).off().on('click', function() {
// function body
});
Run Code Online (Sandbox Code Playgroud)
仅删除已注册的“点击”事件处理程序:
$(element).off('click').on('click', function() {
// function body
});
Run Code Online (Sandbox Code Playgroud)
根据布伦南的回答,
$('#button1').on('click', function(e){
$('#button1').attr('disabled', 'disabled');
$.ajax({
url: url,
type: 'POST',
async: true,
dataType: 'json',
enctype: 'multipart/form-data',
cache: false,
success: function(data){
$('#button1').removeAttr('disabled');
},
error: function(){}
});
e.stopImmediatePropagation();
return false;
});
Run Code Online (Sandbox Code Playgroud)
此处按钮将被禁用,并将在success