2011-07-12 139 views
0

我已經看過這裏,我意識到它看起來不像getJSON返回任何東西,但只是一個不可用的對象。我遇到的問題是我試圖編輯其他人的代碼來從flickr中拉取圖片。我試圖做一個函數來返回圖片的描述。我知道它不返回信息,但是必須有一種方法來更新一個全局變量或以某種方式將我需要的信息傳遞給另一個變量以返回到他的函數。這是迄今爲止我所擁有的傑出人物。getJSON返回數據

function add_description(n){ 

    var img_id = String(n); 


    var textInfo =""; 
$.getJSON('http://api.flickr.com/services/rest/?method=flickr.photos.getInfo&api_key=36c8b00c47e8934ff302dcad7775d0a2&photo_id='+img_id+'&format=json&jsoncallback=?', function(data){ 


       textInfo = String(data.photo.description._content); 
       alert(textInfo); 
       return textInfo;   

      }) 


} 

這是我您的更新後,喬治試圖代碼。謝謝!

var testObj=$.getJSON('http://api.flickr.com/services/rest/?method=flickr.photos.getInfo&api_key=36c8b00c47e8934ff302dcad7775d0a2&photo_id='+img_id+'&format=json&jsoncallback=?', function(data){ 



       textInfo = String(data.photo.description._content); 
       alert(textInfo); 
       return textInfo; 



      }) 

回答

1

的第一步是分配結果到了textInfo變量:

$.getJSON(...) { 
    textInfo = String(data.photo.description._content); 

的$ .getJSON()的調用是異步的,所以你的代碼return textInfo;的$ .getJSON之前可能運行了()呼叫完成。因此,textInfo變量仍然是一個空字符串。您需要從$ .getJSON()調用中調用其他代碼,或者延遲執行返回,直到異步調用完成。

此答案是根據similar answer found here

EDIT(根據您的問題更新)

你是不會成功的,包括$.getJSON()範圍內return語句。您可以像結束一樣將結果分配給變量textInfo,並且該值在$ .getJSON完成時可用。

但是,您必須確保在嘗試訪問該值之前調用已完成。你可以使用setTimeout(),這似乎很麻煩,或者你可以用$ .ajax()代替$ .getJSON()調用,這樣你就可以使用'async = false'選項。這將強制調用在繼續執行之前完成,允許在返回變量之前填充該變量。

+0

那是因爲鏈接在IMG-ID動態服用。我知道它會正確地提取信息。我調試了它,並看到它得到了描述,就像我問的那樣。 – Elliott

+0

@程序員:請參閱我更新的答案。 –

+0

喬治,因爲我看到這可能是一個問題。我嘗試了許多不同的方式,例如我在調用JSON時返回了一個實例,而我從JSON中獲取的內容僅僅是「null」,而不是空白,如果它沒有正確設置變量,我會得到它。 – Elliott

0

照片不存在..

console.log(data); 

輸出:

code: 1 
message: "Photo "2121" not found (invalid ID)" 
stat: "fail" 
+0

閱讀我的評論我離開了喬治。 – Elliott