Php 如何检查Jquery是否已发送ajax请求?
我使用Ajax请求发布带有Jquery的表单Php 如何检查Jquery是否已发送ajax请求?,php,jquery,ajax,Php,Jquery,Ajax,我使用Ajax请求发布带有Jquery的表单 $.ajax( { type: "POST", url: "login.php", data: $("#signin").serialize(), dataType: "json", cache: false, success: function(data, textStatus) {
$.ajax(
{
type: "POST",
url: "login.php",
data: $("#signin").serialize(),
dataType: "json",
cache: false,
success: function(data, textStatus) {
if (data.redirect) {
window.location.replace(data.redirect);
}
else {
$('#some').fadeOut(200);
$('#some2').fadeIn(200);
$("#some3").html(data.form);
$("#some").delay(2000).fadeOut(200);
$('#some2').delay(2800).fadeIn(300);
}
}
});
现在,只要单击“登录”按钮,ajax请求就会发生。现在的问题是,如果您多次按下按钮,else案例将执行多次,这将导致#some、#some2和#some3淡出并多次执行。那么,我如何检查请求是否已发送完毕(无需在数据库中写入内容)?设置布尔标志,例如,
login\u in\u process
,登录时在true
值中检查此标志。并在每次单击时检查此标志,如果它true
,则返回空值。在成功和错误回调中,将其设置为false
状态。您可以使用布尔值记录是否已单击它:
var loginClicked = false;
$('input_button_element').click(function(){
if (!loginClicked) {
loginClicked = true;
// your js here - you may want to add some visual feedback to the user also
}
});
您可以创建一个全局变量
var loginClick = false;
在方法中,首先检查该值
if (!loginClick) {
loginClick = true;
//your ajax code;
}
发件人:
您可以使用方法并在ajax回调中再次设置它
function doAjax(){
// Your Ajax call.
$.ajax({..., complete: function() {
// Ajax call done, re-enabling the button/link
$("#buttonId").one('click', doAjax);
}, ...});
}
$("#buttonId").one('click', doAjax);
必须在全局范围内存储布尔值,例如,存储在窗口对象上的布尔值:
if (!window.isClicked) {
window.isClicked = true;
...Do your ajax call here
}
记住始终恢复window.isClicked的值,而不仅仅是在ajax()的成功回调中:
单击按钮后立即移除按钮上的钩子,完成后在处理程序中再次连接,以获得成功或错误,或者禁用按钮以同时向用户提供一些反馈。var loginClick=false;我会把准备好的部分放进我的文件里,不是吗?因为我的函数登录不在document.ready部分中。然而,它是这样工作的吗?这毫无意义。您可以将其放在那里,但也可以将其放在文档之外。更好地泛洪全局范围的readyBad实践就是将变量放在函数范围内。非常同意。不知道我在抽什么:)如果我把第一个
$(“#buttonId”).one('click',doAjax)代码>进入else案例后面的成功案例,然后链接将立即重新启用,给我带来相同的问题…我将其放入complete
回调而不是success,因此如果调用不成功,事件将再次被重新索引。我现在将其放入complete
回调,但似乎$(“#buttonId”).1('click',doAjax)完整回调中的code>将在success
回调中的else案例完成之前执行…请查看complete
文档:“请求完成时调用的函数(在执行成功和错误回调后)”
var jqxhr = $.ajax( ... )
.done(function() { })
.fail(function() { })
.always(function() { window.isClicked = false });