1

我有一个jquery网站,我可以在其中创建asynchronous callfacebook API

loading widget只要调用 API 并在调用完成后隐藏小部件,我就需要运行一个。

出于这个原因,我决定使用deferred.then()jquery 提供的方法。

这是我原来的异步调用

window.fbAsyncInit = function() {
            // init the FB JS SDK 
            FB.init({
                appId      : '564984346887426',                                                  // App ID from the app dashboard
                channelUrl : 'channel.html',                                                     // Channel file for x-domain comms
                status     : true,                                                               // Check Facebook Login status
                xfbml      : true                                                                // Look for social plugins on the page
            });
            FB.api('169070991963/albums', checkForErrorFirst(getAlbums));
        }

我尝试:

window.fbAsyncInit = function() {
            // init the FB JS SDK 
            FB.init({
                appId      : '564984346887426',                                                  // App ID from the app dashboard
                channelUrl : 'channel.html',                                                     // Channel file for x-domain comms
                status     : true,                                                               // Check Facebook Login status
                xfbml      : true                                                                // Look for social plugins on the page
            });
            $.mobile.loading("show");
            FB.api('169070991963/albums', checkForErrorFirst(getAlbums))
            .then(
                function(){ $.mobile.loading("hide");
            });
        }

但我得到了错误:

Uncaught TypeError: Cannot call method 'then' of undefined 

我知道我用错了。但是来自 jquery 站点的示例并不能帮助我很好地理解它应该如何在这里完成。有任何想法吗?

4

1 回答 1

3

创建延迟对象

var $df = $.deferred();

编辑我错了,事情发生了变化,请参阅 udpate。

FB.api 接受第二个参数作为完成后触发的回调函数。

FB.api('169070991963/albums', checkForErrorFirst(getAlbums));

然后,在函数 checkForErrorFirst() 中,您需要解析对象

function checkForErrorFirst($arg){
    //yuor code
    $df.resolve();
}

然后当它被解决时,它会触发.done(),所以我们提供一个回调

$df.done(function(){
     alert('resolved');
});
于 2013-07-29T15:43:48.993 回答