2010-07-20 31 views
1

我有一個輸出json數據的php腳本。爲了測試的目的,我已經把睡眠(2)放在首位。通過ajax請求一些東西 - 如何停止其他請求,直到完成這一步

我當你點擊一個按鈕,請求數據的HTML頁面,並執行$('.dataarea').append(data.html)

(PHP腳本返回JSON編碼陣列。data.html有我想提出在年底的HTML <div class="dataarea">...HERE</div>

麻煩的是,如果我按一下按鈕過快(即不止一次兩秒(由於睡眠中多(2)在PHP腳本)),它要求PHP文件一次。

我該如何讓它一次只做一個請求?

我試過這個(編輯到顯示的重要組成部分):

amibusy=false; 

$('#next').click('get_next'); 

function get_next() { 

    if (amibusy) { 
    alert('requesting already'); 

} 
else { 

    amibusy=true; 
    // do the request, then do the append() 
    amibusy=false; 

} 


} 

但這似乎並沒有工作。我甚至嘗試用set_busy()和set_not_busy()替換amibusy = true | false。 (並做了一個函數am_i_busy(){return amibusy;})

但這似乎沒有工作。我錯過了什麼?

回答

1

如果你在jQuery的是在amibusyjQuery.active其中包含當前活動的AJAX請求的計數,像這樣:

if(jQuery.active > 0) { //or $.active 
    alert('Request in Progress'); 
} 

請記住,在jQuery的1.4.3這成爲jQuery.ajax.active

+0

嘿,那整理它!謝謝! – phpno 2010-07-20 19:06:01

+0

@phpno - 歡迎:)並歡迎來到SO! – 2010-07-20 19:06:41

0

禁用click事件中的按鈕,並在請求完成時再次啓用它。請注意,請求是異步的(即「發送請求」立即返回),所以您必須註冊一個函數,當答案進來時調用。

在jQuery中,請參閱load()函數和成功方法加上各種AJAX您可以使用ajax()進行的活動。

0

我在想你的「請求」邏輯。每當我完成像這樣的調用時,它們總是異步的,意味着我關閉了請求,然後當響應出現時,另一個函數處理該請求。在這種情況下,它會在設置回調處理程序之後完成該功能,並在請求實際返回之前將您的amibusy的值重新設置爲false。您需要在處理程序中爲您的回調函數設置該變量。

0

你可以使用async變量嗎? http://api.jquery.com/jQuery.ajax/

asyncBoolean默認值:true

缺省情況下,所有的請求被髮送 異步(即這是通過默認設置爲true )。如果您需要同步 請求,請將此選項設置爲false。 跨域請求和數據類型: 「jsonp」請求不支持 同步操作。請注意, 同步請求可能會暫時 鎖定瀏覽器,並在請求處於活動狀態時禁用任何 操作。

+0

*請不要使用這個,它會在AJAX請求運行時無緣無故鎖定瀏覽器,應儘可能避免使用「async:true」。 – 2010-07-20 17:14:12

+0

啊!感謝您的headup :) – 2010-07-21 08:13:30