javascript 变量未定义

标签 javascript jquery function scope

我正在编写一个小型 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/

相关文章:

Javascript/PHP : upload resized images first, 大文件稍后

javascript - 在同一位置淡入和淡出文本

javascript - 请求超时

javascript - 使用 jQuery 查找位于具有特定属性的行之后的 <tree>

string - 粘贴的替代功能

javascript - 回复 : A JavaScript Fn that accepts unknown # args - call Fn wrks - call via var does not

sql - 滞后函数不接受使用 postgres SQL 的浮点值

JavaScript/React Native 数组(对象)排序

javascript - 在 drupal 中单击没有灯箱的画廊(多个 cck 图像)

javascript - 已弃用的 "target"属性的任何正式替代方案?