【问题标题】:Facebook query looping issueFacebook 查询循环问题
【发布时间】:2012-03-09 15:02:25
【问题描述】:

我有以下 JavaScript 代码,它获取当前登录用户的所有专辑 ID:

function fqlQuery(){
            showLoader(true);
            var albums= new Array();
            FB.api('/me', function(response) {
                var query =  FB.Data.query('SELECT aid, owner, name, object_id FROM album WHERE owner={0}', response.id);
                var aantal_albums=0;        
                var photos= new Array();
                query.wait(function(rows) {
                aantal_albums= rows.length;     
                    for(var i=0; i<aantal_albums;i++){

                     albums[i]= rows[i].aid;
                    }
                 });
            });
            alert(albums[1]);       
        }

我的问题是,最后一行,警报不起作用。它是在填充数组的函数之外调用的,但这应该没问题,因为数组是在顶部声明的(var albums= new Array),对吧? 我觉得房间里有一头大象,我看不到它。你看有什么不对吗?不知道是fql问题还是JavaScript问题。

【问题讨论】:

    标签: javascript facebook facebook-fql


    【解决方案1】:

    你不是在异步思考;在您传递给 FB.api 的回调运行之前,该数组不会被填充,并且您的 alert 在此之前执行。

    alert 放在你的回调函数中,你应该会得到你期望的结果。

    【讨论】:

      【解决方案2】:

      API 是异步的。在结果实际可用之前,您将无法看到结果。

      如果您将警报移动到响应函数内部,就像在for 循环之后,事情应该会更好。

      【讨论】:

        【解决方案3】:

        这是一个 JavaScript 问题。具体来说,就是你对异步事件和回调的理解有问题。

        如果您查看您的程序结构,很明显您是:

        1. var albums= new Array(); // creating an Array
        2. FB.api('/me', function() {}); // launching an API request
        3. alert(albums[1]); // accessing the second album

        但是,API 请求是异步的,这一点并不总是很清楚。 API 请求在您调用 FB.api()启动,但不会立即完成。这就是FB.api()的第二个参数的作用;它允许您指定一个函数(即一段代码),该函数的执行会延迟到 API 请求完成一段时间后

        您只能在回调函数中使用 API 调用的结果。当然,albums 数组已被声明;但是直到它被回调填充一段时间后,它的长度是0;并且您正在尝试访问第二个元素。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多