簡體   English   中英

如何檢查ajax請求是否已經通過Jquery發送?

[英]How to check whether an ajax request has allready been sent with Jquery?

我正在使用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 case將被執行幾次,這將導致#some,#some2和#some3淡入淡出並出現幾次。 那么,如何檢查請求是否已全部發送(而不必在數據庫中寫入內容)呢?

在登錄時設置布爾值標志,例如login_in_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;
}

這里

您可以使用.one()方法,然后在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);

您將必須在全局范圍內存儲一個布爾值,例如,一個布爾值存儲在window對象上:

if (!window.isClicked) {
    window.isClicked = true;
    ...Do your ajax call here        
}

請記住,不僅要在ajax()的成功回調中,始終要還原window.isClicked的值:

var jqxhr = $.ajax( ... )
.done(function() {  })
.fail(function() {  })
.always(function() { window.isClicked = false });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM