Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查Jquery是否已发送ajax请求?_Php_Jquery_Ajax - Fatal编程技术网

Php 如何检查Jquery是否已发送ajax请求?

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请求发布带有Jquery的表单

$.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)将在
success
回调中的else案例完成之前执行…请查看
complete
文档:“请求完成时调用的函数(在执行成功和错误回调后)”
var jqxhr = $.ajax( ... )
.done(function() {  })
.fail(function() {  })
.always(function() { window.isClicked = false });