我正在编写一个小型 Flickr 图像抓取应用程序,我们在自己的服务器上有一个 JSON 代理。下面的函数从给定 id
的照片集中抓取图像。
function getPhotosFromPhotoset(p_id) {
var data;
$.getJSON('/flickr_get_photos', {
photoset_id: p_id
}, function(res) {
data = res;
console.log("res: " + JSON.stringify(data));
if (res.status == 'ok') {
if (res.data.length > 0) {
//nada
} else {
data.status = "error: Photoset has no photos.";
}
} else {
data.status = "An unknown error occurred; please try again.";
}
});
return data; //undefined?!
}
为什么data
突然变得未定义?当我在 getJSON
中使用 console.log
时,它是完全有效的。
最佳答案
该函数早在 ajax 请求发出之前就返回了。在回调函数中使用data
(您实际上是在回调函数中记录它,保证它可用)。 $.getJSON
接受回调函数并不是为了好玩,而是出于这个原因。
你可以这样做:
function getPhotosFromPhotoset(p_id) {
return $.getJSON('/flickr_get_photos', {
photoset_id: p_id
});
}
getPhotosFromPhotoset(1).then(function(data) {
//Use data here
});
而不是尝试这样做:
var data = getPhotosFromPhotoset(1); //will not work
除非您将请求设置为同步,否则这将不起作用,这会带来更严重的问题。
关于javascript 变量未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11438342/