2010-11-17 132 views
6
function lookupRemote(searchTerm) 
{ 
    var defaultReturnValue = 1010; 
    var returnValue = defaultReturnValue; 

    $.getJSON(remote, function(data) 
    { 
     if (data != null) 
     { 
      $.each(data.items, function(i, item) 
      { 
       returnValue = item.libraryOfCongressNumber; 
      }); 
     } 
    }); 
    return returnValue; 
} 

爲什麼returnValue這個函數總是等於在函數開頭設置的默認值,而不是從JSON查找檢索的值?

+0

請參閱http://stackoverflow.com/questions/3537434/cant-get-correct-return-value-from-an-jquery-ajax-call – 2010-11-17 02:55:39

+0

可能的重複[如何從AJAX調用返回響應? ](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) – Bergi 2014-04-30 21:22:06

回答

11

發生這種情況的原因是回調函數(function(data) {...})在響應回來時運行以後的 ...因爲它是異步函數。相反,使用值,一旦你有它設置,如下所示:

function lookupRemote(searchTerm) 
{ 
    var defaultReturnValue = 1010; 
    var returnValue = defaultReturnValue; 
    $.getJSON(remote, function(data) {   
     if (data != null) { 
       $.each(data.items, function(i, item) {     
        returnValue = item.libraryOfCongressNumber; 
       }); 
     } 
     OtherFunctionThatUsesTheValue(returnValue); 
    }); 
} 

這是正路所有異步行爲應該是,打完折任何需要的價值,一旦你擁有它......這是當服務器響應數據。

3

時對HTTP請求的響應到達這是不會立即傳遞給getJSON該函數運行

return語句在之前執行響應,所以該變量尚未設置。

讓您的回調函數完成需要對數據執行的操作。不要試圖歸還它。

8

如果你不想使用異步功能,更好地使用以下命令:

function getValue(){ 
    var value= $.ajax({ 
     url: 'http://www.abc.com', 
     async: false 
    }).responseText; 
    return value; 
} 

這個函數等到該值從服務器返回。

+0

推薦使用** responseJSON ** ..謝謝,工作正常! – KingRider 2016-11-21 13:02:28

相關問題