我有一个jquery
网站,我在 facebook API 上asynchronous call
。
我需要在调用API时运行loading widget
,并在调用完成后隐藏窗口小部件。
出于这个原因,我决定使用jquery提供的deferred.then()
方法。
这是我原来的异步调用:
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站点的例子并没有帮助我理解它应该如何在这里完成。有什么想法吗?
答案 0 :(得分: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');
});