2014-03-13 77 views
1

我有一個顯然默認爲異步的ajax函數。但是我在嚮導的第一步中已經有了這個功能。所以當函數執行時,其目的是保存一些東西,保存後返回最後一個插入行的ID。事情正常。JQUERY中的AJAX調用後的延遲

但是,我面臨的問題是,這是在嚮導的下一步按鈕執行,所以ajax調用是異步,步驟明確跳到下一步。但服務器端功能仍然在後臺執行。所以在第二步中,我需要在第一步中生成的ID。但是如果用戶立即點擊第二頁上的下一步按鈕,那麼由於服務器端仍在運行該進程,所以不會得到該ID。當然,我可以通過驗證第二頁覆蓋此。但除了在第一頁ajax調用啓動後需要等待或延遲之外。這意味着我需要2-3秒的延遲,當用戶點擊第一頁的下一個按鈕時,但在啓動Ajax請求之後。

如何才能做到這一點?

My AJAX call 
Delay of 5 seconds 
Only then wizard should step ahead 
+1

基本上你回答你的問題。沒有看到您的代碼就無法回答具體細節。這個想法是,無論你現在做什麼來展示嚮導的下一步,都是在ajax調用的成功回調中完成的。研究承諾可能也很有用,它們可以用異步代碼提供很多幫助。 –

+0

使用ajax回調有什麼問題? –

+0

@Hans其實當我使用ajax成功回調時,它將在服務器端函數完成時執行。但是由於ajax調用是異步的,所以當服務器端函數執行時,嚮導將明確移動到下一步。因此,用戶可以點擊向導新頁面的繼續按鈕。爲了避免這種情況,我認爲在AJAX調用之後放置一個小的有意義的延遲(非Async = false) 因此,由於我有ladda按鈕,用戶可以看到某些內容在運行,因此他可以等待。 –

回答

0

您需要使用Ajax調用後評論澄清完成

$.get("/get/something/", function(data) { 
    // now you can do your thing when 
    // ajax call have finished 
    // in data variable you have the response from the server 

    // if you need more time 
    setTimeout(function() { 
     // this code will execute after half a second 
    }, 500); 
}) 

編輯後運行一個回調函數:

如果您不需要的步驟1數據繼續,您應該跳到下一步,讓流程進入後臺。只要讓用戶知道。

$("#infopanel").html("Processing..."); 
$.get("/get/something/", function(data) { 
    $("#infopanel").html("Ready!"); 
}) 

如果您仍然希望在行動之前等待5秒:

setTimeout(function() { 
     MoveToNextStep(); 
    }, 5000); 
+0

請考慮一下,如果第一步的服務器端功能是一個可能需要長達10秒的冗長功能。因此,由於Ajax調用是異步的,顯然不會等待那個服務器端函數完成,所以智能嚮導將跳轉到下一步。希望這一點很明確。因此,如果當時10秒的間隔(記住服務器端進程沒有完成),如果用戶點擊第二步的下一步按鈕,該步驟將不會獲得在第一個服務器端代碼之後創建的ID。現在希望它清楚。 –

+0

ajax回調將在服務器端函數返回響應之後執行(是的,在10秒之後) –

+0

Yea,Im稍微糾正一下你的句子「Ajax回調將在服務器端函數返回響應之後執行」。那就是問題所在。但是,如果在第一步之後對用戶進行5秒的延遲,那麼過程將在接下來的5秒內完成,屆時用戶可以完成第二頁的任務。因此,他不需要等待整個10秒鐘,那個時候我們可以降低到5.對不起,這個奇怪的要求.. –