2014-02-18 66 views
0

我有一個用例是這樣的:同步在JavaScript

當用戶點擊一個單選按鈕,我做一個AJAX調用得到一些依賴於用戶選擇信息。當用戶點擊鏈接時,我使用AJAX調用信息來顯示警報。

我需要:

  1. 確保Ajax調用的結果都寫在正確 爲了
  2. 如果用戶打開警報,在此之前AJAX調用結束後我要顯示他等待圖標,否則顯示他 警報
  3. 如果從AJAX響應不者進來2S我會顯示警告反正

我不是真的問如何在JS中做這個特定用例,因爲我可以弄清楚如何結合計時器,jQuery ajax回調等。

我看到一個更通用的方法問題:

我們有三個事件(AJAX成功,用戶點擊,超時)和我wanto一些代碼相關聯,以通過對事件的一些條件被觸發。是否有任何框架可以將行動與事件組合相關聯?

或者我只是使用錯誤的方法?

回答

0

1 - 如果響應順序很重要,則允許多個並行請求是無用的,這意味着當用戶選擇一個單選按鈕時,應排隊操作。承諾很容易實現。

E.g.

var promiseQueue; 

function processRequest(radioValue) { 
    return $.ajax({ ... }).done(/*handle request*/); 
} 

function onRadioClicked() { 
    var radioValue = this.value; //assuming this is your radio element 

    //if the queue was initialized, queue our next operation using "then", 
    //otherwise process the request directly and initialize the queue with the 
    //returned promise. 
    promiseQueue = promiseQueue? 
     promiseQueue.then(processRequest.bind(null, radioValue)) : 
     processRequest(radioValue); 
} 

2 - 請勿使用alert,因爲它會阻止您的用戶界面。你可以使用jQuery UI的Dialog插件或類似的東西。每次處理響應時,您都可以檢查promiseQueue.state()以查看是否有其他請求需要處理或者全部處理完畢。

3 - 您可以將timeout配置傳遞給$.ajax以允許請求完成的最長時間。看看https://api.jquery.com/jQuery.ajax/