这个想法是开发一个简单的 jquery 移动网站,从公共 facebook 页面导入相册和照片并将它们显示给用户。
我正在使用 Facebook 的 Javascript SDK,我可以成功地从页面中检索我需要的所有信息,如相册名称、照片链接等。
我在这里唯一缺少的是如何将所有这些动态添加到我的网站。我的意思是我每次都需要能够检查我有多少张专辑以及每个专辑中有多少张照片,然后在 jQuery Mobile 中创建一个包含所有专辑名称的 listView。
问题:
我知道如何使用 jQuery Mobile 向 listView 动态添加元素。然而在这种情况下,“数据”,例如专辑名称是通过 facebook SDK异步获取的,当我的页面加载时,应该存储这些数据的变量是空的!
在这里的图片中!(抱歉没有足够的代表在这里发布)我尝试在我的 listView 中添加专辑名称,但结果令人失望
如您所见,保存专辑名称的变量是“未定义”,因为异步调用尚未完成..(不要介意错误只是缺少缩略图)
这是我写的代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CityInfo</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" />
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile.structure-1.3.1.min.css" />
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
</head>
<body>
<div id="fb-root"></div>
<script>
var albumName = new Array();
var albumId = new Array();
var albumCover = new Array();
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
});
// Additional initialization code such as adding Event Listeners goes here
FB.api('593959083958735/albums', function(response) {
if(!response || response.error) {
// render error
alert("Noo!!");
} else {
// render photos
for(i=0; i<response.data.length; i++){
albumName[i] = response.data[i].name;
albumCover[i] = response.data[i].cover_photo;
albumId[i] = response.data[i].id;
}
}
});
};
// Load the SDK asynchronously
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
$(document).ready(function(){
$("ul").append('<li><a href="testFile.HTML" data-transition="slidedown"> <img src="photo.png"/> <h2>' + albumName[0] + '</h2> <p> Test Paragraph</p></a></li>').listview('refresh');
});
</script>
<div data-role="page" id="home" data-theme="c">
<div data-role="content">
<h2 id="banner" align = "center">Photo Albums</h2>
<ul data-role="listview" data-inset="true">
</ul>
</div>
</div>
</body>
</html>
如您所见,我实现了 javascript SDK,得到了 albumNames、Ids 等(当我提醒这些变量时,它们具有预期的所有数据!警报是否真的在等待异步调用完成?)。然后我使用 jQuery 在我的 listView 上添加一个元素,但变量是空的(如您所见,未定义)。
那么我在这里真正想念什么?我应该把我的 jQuery 代码放在哪里,这样它才能真正等待异步调用完成。