我已经浏览了这里,我发现它看起来并不像getJSON只返回一个不可用的对象。我遇到的问题是我正在尝试编辑其他人的代码以从flickr中提取图片。我正在尝试创建一个将返回图片描述的函数。我知道它不会返回信息,但是必须有一种方法来更新全局变量或以某种方式将我需要的信息传递给另一个变量以返回到他的函数。这是我到目前为止的主旨。
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;
})
}
这是我在更新George后尝试的代码。谢谢!
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;
})
答案 0 :(得分:1)
第一步是将结果分配给textInfo
变量:
$.getJSON(...) {
textInfo = String(data.photo.description._content);
$ .getJSON()调用是异步的,因此您的代码return textInfo;
可能在$ .getJSON()调用完成之前运行。因此,textInfo
变量仍然是一个空字符串。您需要在$ .getJSON()调用中调用其他代码,或者延迟执行返回,直到异步调用完成。
此答案基于similar answer found here。
编辑(根据您的问题更新):
您将无法在$.getJSON()
范围内包含return语句。您可以像以前一样将结果分配给变量textInfo
,并且当$ .getJSON完成时,该值将可用。
但是,在尝试访问该值之前,必须确保已完成调用。您可以使用setTimeout()
,这看起来很乱,或者您可以替换$ .ajax()进行$ .getJSON()调用,这样您就可以使用'async = false'选项。这将强制调用在继续执行之前完成,允许在返回变量之前填充该变量。
答案 1 :(得分:0)
照片不存在..
console.log(data);
输出:
code: 1
message: "Photo "2121" not found (invalid ID)"
stat: "fail"