2012-07-26 30 views
-1

可能重複jQuery函數程序順序:
What does Asynchronous means in Ajax?
jQuery ajax return value的內部JS

試圖做包含jQuery函數(getJson())作爲其一部分的功能,但當我運行它時,我的javascript函數返回之前調用getJson()。我想知道爲什麼getJson沒有按順序調用,以及如何解決它。

function getUsers(screen_name){ 
user_list=[] 
var id_list =[] 

    $.getJSON(url, function(json) 
    { 
     //do stuff here, I have breakpoint #1 here 
    }); 

    return user_list //breakpoint #2 is here 
} 

當從控制檯運行它:getUsers('myUser')它首創到達斷點#2,然後到斷點#1。

+0

'getJSON'按順序調用,但它發出Ajax請求。 – 2012-07-26 20:58:33

+0

這個問題必須有幾個*十幾*版本已經在SO上提出並回答。 – 2012-07-26 20:59:31

+0

但我找不到任何東西。我正在刪除它 – leonsas 2012-07-26 21:00:51

回答

2

getJSON()默認爲異步。這意味着調用它只是開始操作,而其餘的JavaScript繼續運行。過了一段時間,異步操作結束,並且使用返回的數據調用成功處理程序。

需要訪問返回數據的任何代碼必須位於成功處理程序中,或者位於您從成功處理程序調用的函數中。您不能使用異步功能,只需返回user_list就像您正在嘗試。

相反,您將不得不重新考慮您的代碼是如何組織的,以便使用user_list的代碼位於成功處理程序中或從成功處理程序調用。

getJSON()可以設置爲同步,但這通常是在javascript中編程的不好的方法,因爲它在網絡呼叫期間鎖定瀏覽器,這通常是糟糕的用戶體驗。相反,如果你正確地編寫代碼來處理它是同步的,那麼瀏覽器在整個Ajax調用期間保持完全交互。