2012-02-03 89 views
1

我想在函數中運行ajax請求。基本上...

function doIt(id) { 
    var myVar; 
    $.ajax({ 
     ... url etc... 
     success: function(result) { 
      myVar = "Some stuff" + result; 
      console.log(myVar); 
     } 
    }) 
    return myVar; 
} 

但myvar未設置爲當我登錄成功後它是什麼。我怎樣才能得到該功能重新調整的變量?

+0

記錄「結果」 - 在那裏檢查。 – 2012-02-03 22:29:28

回答

2

$.ajax是異步的,這意味着它在下一行執行之前沒有完成。正在發生的事情是success事件觸發之前return myVar;正在執行。

關閉async財產關閉,並且將表面上解決您的問題:

function doIt(id) { 
    var myVar; 
    $.ajax({ 
     ... url etc..., 
     async: false, 
     success: function(result) { 
      myVar = "Some stuff" + result; 
      console.log(myVar); 
     } 
    }) 
    return myVar; 
} 

但是,這將使你的瀏覽器掛起,所以解決這個最好的辦法是把所有處理success事件的內部。

function doIt(id) { 
    var myVar; 
    $.ajax({ 
     ... url etc..., 
     async: false, 
     success: function(result) { 
      myVar = "Some stuff" + result; 
      console.log(myVar); 
      // TODO: Everything related to `myVar` here. 
     } 
    }) 
} 
+0

@justing,async false不是好事,因爲它會阻止用戶,直到它完成,而是在成功執行您的操作 – kobe 2012-02-03 22:30:25

+1

這通常是一個可怕的想法,因爲瀏覽器將掛起,直到請求完成。這樣做有一些原因,但沒有很多好的。 – 2012-02-03 22:30:45

+0

'async:false'將鎖定瀏覽器直到完成調用。我建議不要這樣做。相反,我建議改變你使用'myVar'的方式。 – 2012-02-03 22:30:50

3

Ajax調用是aysnc,所以它發生平行就是原因,你沒有得到結果

您不能返回這樣的 var myVar;

function doIt(id) { 

    $.ajax({ 
     ... url etc... 
     success: function(result) { 
      myVar = "Some stuff" + result; 
      console.log(myVar); 
      // do your logic here after the ajax success 
     } 
    }) 
} 
2

你不能值從AJAX調用中返回一個值。它是異步的。在AJAX調用完成之前運行return

您需要在回調中執行所有有關myVar的邏輯。