javascript变量未定义
javascript variable is undefined
我正在编写一个小型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
除非您将请求设置为同步,否则这将不起作用,这会带来更严重的问题。
它不会突然变得未定义。getJson
是一个异步调用,设置data
值的函数是当服务器返回响应时得到的调用,getPhotosFromPhotoset
在执行完成之前没有等待服务器响应,因此数据值还没有设置任何内容。
AJAX异步执行,所以当您说:
return data; //undefined?!
该代码在function (res)
中的代码之前执行,这就是data
未定义的原因。若要对data
执行某些操作,则需要向getPhotosFromPhotoset
传递一个回调函数,该函数将由getJSON
的success
回调执行。
这有道理吗?
相关文章:
- Socket.IO未定义变量
- 更改 Javascript 对象中所有未定义变量的值
- coffeescript,类未定义变量
- 使用下划线未定义变量时发生抛出/捕获错误
- 网络浏览器正在成为“;严格的“;用于Javascript中未定义变量的操作
- 使用window.location时未定义变量
- 传递给数据的未定义变量
- bizzare未定义变量
- JavaScript 中全局范围内存在未定义变量的原因是什么?
- JavaScript onClick 参数表示未定义变量
- 在指令中使用 $scope.$watch 处理未定义变量的替代方法
- 对于循环错误:未捕获的引用错误,未定义变量.怎么了
- JavaScript / YouTube API - 未定义变量 YT
- 未捕获的引用错误:在测试真实性时未定义变量
- 通过使用JavaScript“未定义”(变量),我们可以释放系统内存
- 与未定义变量相关的错误
- Angularjs 控制器中的未定义变量
- 角度解析:未定义变量
- BackboneJS Uncaught ReferenceError:未定义变量
- 使用Underscore JS部分和for循环的未定义变量对象