2011-02-11 13 views
2

我有一個網頁,有將發送到Web服務的初始請求的功能。 經過一段預定義的時間後,用戶可以發送第二個請求。 用戶發送第一個請求後,我希望網頁在用戶發送第二個請求時進行倒計時。 倒計時後,我想要一個數據庫字段自動更新,表明適當的時間已過。 當時間已過並且數據庫已更新時,我希望網頁更新爲顯示允許用戶發送第二個請求的按鈕。新手「你能做到這一點與道場/阿賈克斯問題

+1

是的,你可以! (請問具體問題,你確切的問題是什麼?你在哪裏堅持?) –

回答

2

初始請求後,呼叫JavaScript用戶定義函數「countdown()」使用內置JavaScript函數「setTimeout("countdown()", 4000)」,其中數字「4000」類似的需要被傳遞到火微秒數在第一個參數中提到的功能。

在「countdown()」的功能,寫的AJAX調用,則邏輯在這裏您將更新該4秒(例如)所需的時間已經過去&現在用戶可以發送第二請求的數據庫。

而且在同一個AJAX調用,您可以打印出一些字(讓這個詞是「yes」爲例),可以捕獲/在「countdown()」函數定義取水的時候,使用「responseText」關鍵字JavaScript的「XMLHttpRequestObject」,在一個虛擬變量「flag」中。

現在你可以寫一些像「countdown()」函數定義如下: -

function countdown() { 
    document.getElementById("btn_second_req").style.display = 'none'; 
    var flag = ''; 
    // all code to prepare for AJAX call 

    // AJAX called, return also fetched in a variable "flag". 
    if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) { 
     flag = XMLHttpRequestObject.responseText; 
    } 

    if (flag == 'yes') { 
     document.getElementById("btn_second_req").style.display = 'block'; 
    } 
} 

所以默認情況下,第二個請求觸發HTML按鈕,從第一次隱蔽,&只有激活時滿足「flag」變量條件。

此外,由於任何用戶的第一個調用的詳細信息都保存在數據庫中,因此在第二個調用中,您需要檢查服務器驗證是否存在第一個調用的詳細信息,否則第二個請求調用將會不被娛樂。

這些類型的邏輯可以使用任何JavaScript框架庫(如jQueryPrototype)或僅使用純JavaScript來輕鬆實現。

希望它有幫助。

1

是的,它可以做到。這就是我將如何去做的,這幾乎和你描述的一樣。

1的網頁發送請求到服務。該服務計算直到下一個請求可以執行的時間,將其存儲在db字段/會話中(取決於您的服務如何工作),然後將其發送回客戶端,以及您的服務發回的任何時間。

2-(如果你使用一個JavaScript庫或等效)http://www.w3schools.com/js/js_timing.asp創建使用JavaScript的setTimeout函數的計時器。

3-當計時器執行的話,將請求發送到web服務,詢問其確定開始第二次請求。服務器檢查db字段中的時間。如果它已經過去了「下一個請求時間」,服務器響應肯定的,否則它會返回剩餘的時間,然後客戶端創建一個新的計時器。

4-您發送您的新的要求。服務器再次檢查其「下一個請求時間」(以防某人智能破解javascript,或者如果他們是客戶端上的錯誤)。如果是時間,則執行第二個請求。

唯一的區別是,我所描述的方式,在服務器上執行的一切作爲客戶端操作的結果,所以你不必與螺紋/ cron作業一塌糊塗自動更新您的數據庫字段。

祝你好運!