2011-07-12 142 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