我创建了一个ajax请求,它在按钮点击事件中将一些数据发送到php文件。现在提交数据后,我想限制ajax请求,不要通过单击按钮一次又一次地发送数据。它仅在页面刷新时发送数据(表示在页面加载时发送一次数据)。我怎么能停止这样的请求。我的ajax代码如下:
$(".button").click(function (e) {
e.preventDefault();
$.ajax({
type: 'post',
cache: false,
url: 'my/ajaxrequest.php',
data: {
result: 'hi test data'
},
success: function (resp) {
$("#result").html(resp);
}
});
});
答案 0 :(得分:9)
只需将.click()
替换为.one()
这样可以防止多次点击再次运行$.ajax()
。
$(".button").one('click', function(e) {
e.preventDefault();
$.ajax({ ... });
}
如果您只需要在页面加载时执行帖子,只需将点击处理程序中的$.ajax()
调用移动到文档就绪函数中:
$(function() {
$.ajax({
type: 'post',
cache: false ,
url: 'my/ajaxrequest.php',
data: { result : 'hi test data' },
success: function(resp) {
$("#result").html(resp);
}
});
});
答案 1 :(得分:1)
更深入的分析可能会将ajax调用限制为一个成功的响应(即状态200&&它是否返回您正在寻找的结果?如果是这样,您可以将此代码放入success
XHR函数的函数:requestLog.sendStatus = true;
如果你只想允许ajax请求初始化一次然后把这个(requestLog.sendStatus = true;
)放在e.preventDefault
之后如果你只想允许ajax调用如果它们实际上是一个成功的响应,那么将requestLog.sendStatus = true
置于ajax对象的success
函数中。
var requestLog = {};
requestLog.sendStatus = false;
$(".button").click(function(e) {
e.preventDefault();
if(requestLog.sendStatus) return;
/* requestLog.sendStatus = true; */
$.ajax({
type: 'post',
cache: false ,
url: 'my/ajaxrequest.php',
data: { result : 'hi test data' },
success: function(resp) {
$("#result").html(resp);
requestLog.sendStatus = true;
}
});
});
您只想在页面加载上运行一次吗?试试这个:
(function() {
$.ajax({
type: 'post',
cache: false ,
url: 'my/ajaxrequest.php',
data: { result : 'hi test data' },
success: function(resp) {
$("#result").html(resp);
}
});
}());
答案 2 :(得分:0)
成功进行Ajax响应后,您需要从按钮中删除click eventHandler
。
示例强>
$("#Btn").unbind("click");
或强>
$.off("click", "input:button", foo);
答案 3 :(得分:0)
只需修改如下:
$(".button").click(function(e) {
e.preventDefault();
$(".button").unbind('click'); //unbind the bound event after one click
$.ajax({
type: 'post',
cache: false ,
url: 'my/ajaxrequest.php',
data: { result : 'hi test data' },
success: function(resp) {
$("#result").html(resp);
}
});
});