2012-05-04 27 views
0

我正在使用Ajax請求用Jquery發佈表單。如何檢查是否已經使用Jquery發送了ajax請求?

$.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淡出並且會多次。那麼我怎麼才能檢查請求是否已經被髮送(而不必寫入我的數據庫)?

+2

上的按鈕,一旦去掉勾當它被點擊時,在處理程序完成後重新附加,以獲得成功或錯誤 – Miquel

+0

或者禁用該按鈕同時向用戶提供一些反饋。 – jeroen

回答

0

here

您可以使用.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); 
+0

如果我把第一個'$(「#buttonId」)。1('click',doAjax);'放入else case後面的成功案例那麼鏈接將立即重新啓用給我同樣的問題... – phpheini

+0

我會把它放在'完成'回調,而不是成功,所以如果通話不成功,事件將重新重新綁定。 – Kamyar

+0

現在我已經把它放到了'complete'回調函數中,但是似乎''(「#buttonId」)。one('click',doAjax);'在完整回調中將會在'成功回調已完成... – phpheini

0

使布爾標誌,例如login_in_process,在登錄時檢查此標誌的值爲true值。然後在每次點擊時檢查這個標誌,如果它true然後作出空回報。在成功和錯誤回調設置它在false狀態。

0

您可以使用一個布爾值來記錄它是否已被點擊:

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 
    } 
}); 
0

你可以做一個全局變量

var loginClick = false; 

裏面你的方法,你先檢查值

if (!loginClick) { 
    loginClick = true; 
    //your ajax code; 
} 
+0

var loginClick = false;我會放入我的document.ready部分,不是嗎? 因爲我的函數登錄不在document.ready部分中。儘管如此,它是如何工作的? – phpheini

+0

這沒有意義。你可以把它放在那裏,但你也可以把它放在document.ready – AndVla

0

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

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

記住,總是恢復window.isClicked的價值,不僅在阿賈克斯()的成功回調:

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

更糟糕的做法是更好地淹沒全局範圍只是功能範圍內可變。 –

+0

不能同意更多。不知道我在抽菸:) – jkgeyti