我刚刚开始在异步编程中练习代码。我有点困惑,为什么我无法使应用程序正常工作。
我试图在var jsonItems中加载json数据。 加载声音,然后播放。
function getJItems(jsonItems, callback){
$.getJSON( "data.json", function( data ) {
jsonItems.push(data);
});
callback(jsonItems);
}
var sI = [];
function loadSoundJson(jsonItems){
for (it =0 ; it < jsonItems[0].length ; it++){
sI[it] = new buzz.sound( "data/"+jsonItems[0][it].filesound, { formats: [ "ogg", "mp3"] });
}
};
这就是我试图打电话的方式。
$( document ).ready(function() {
getJItems(jsonItems,loadSoundJson);
});
我得到的错误是:jsonItems [0]未定义
如果我写,工作正常。
$( document ).ready(function() {
getJItems(jsonItems);
window.alert("forced pause");
loadSoundJson(jsonItems);
});
所以,我只想确保在应用程序启动之前加载并准备好整个内容(图像,声音,数据)。
也许我想要的是,知道如何实现正确的方法来制作一个好的加载页面。 提前谢谢。
答案 0 :(得分:0)
试试这个:
function getJItems(jsonItems, callback){
$.getJSON( "data.json", function( data ) {
jsonItems.push(data);
callback(jsonItems);
});
}
你没有在适当的时候打电话给回叫。 getJSON是异步的,因此当数据可用时,它们将被推送到jsonItems。在任何数据可用之前,首先执行callback(jsonItems);
。
你在第一时间做的是执行getJItems()
做一个ajax调用(无需等待回复)调用回调