我有一个带有按键事件处理程序jsfiddle的文本字段。当我在此字段中输入内容并按“Enter”两次时,将发送 2 个请求。我想关闭所有事件,而 ajax 请求正在进行中。一种选择是.off()
在 ajax 调用之前调用函数,然后再次绑定事件处理程序。还有其他选择吗?
问问题
146 次
3 回答
2
使用来自 ajax 调用的回调处理程序和用作标志的布尔值。通过在“always”回调中将 ajaxLoading 布尔值设置为 false,您可以确保其他未来的请求可以独立于当前的 ajax 调用是否引发错误。
var ajaxLoading = false;
if(!ajaxloading){
ajaxloading=true;
$.ajax({
url: 'your url',
type: 'GET',
dataType: 'JSON'
})
.done(function(data) {
console.log("success");
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
ajaxloading=false;
});
}
于 2013-10-01T13:32:47.047 回答
1
我使用 2 个布尔标志,例如:
var is_requesting = false, should_request = false;
function onkeydown() {
if (is_requesting) {
should_request = true;
return;
}
is_requesting = true;
$.ajax({}, function () {
is_requesting = false;
if (should_request) {
onkeydown();
}
});
}
于 2013-10-01T13:26:36.173 回答
1
您是否有充分的理由不使用 jQuery .off()函数?
如果是这样,那么您可以在发出 ajax 请求之前简单地禁用该控件,并在请求完成后重新启用它。这也将阻止用户认为他/她可以通过在请求期间更改文本值来更改结果。
//Disable the input
$('#myresult').prop('disabled', true);
$('#myresult').append('<br>'+$(this).val());
$.ajax({
type: "POST",
beforeSend: function() {},
complete: function() {
//Re-Enable the input
$('#myresult').prop('disabled', false);
},
url: "/echo/json/",
data: { delay : 3 },
success: function(){},
error: function() {},
dataType: 'json'
});
于 2013-10-01T13:45:54.927 回答