我正在对JSON页面进行AJAX调用,该页面抓取变量来填充HTML5音乐播放器的播放列表。我试图拥有它,因此播放列表数据每分钟都会更新,因为它从收音机中获取信息。我也不想让它刷新播放器本身,只需要刷新播放列表。一切都很好,除了我得到myPlaylist is not defined
我还试图想出每分钟刷新AJAX调用的最好方法......但是一次只做一件事。
$(document).ready(function(){
function ajax_playlist(str1, callback){
$.ajax({
url: "http://radio.silvertoneradio.com/rpc/incoleyl/streaminfo.get",
dataType: 'jsonp',
success: function(data, status, xhr){
callback(data);
console.log(arguments);
}
});
}
ajax_playlist("str", function(pl) {
myPlaylist = [
{
mp3:'http://radio.gnradio.org:9966/vod/mp4:audio/file.m4a/playlist.m3u8',
artist:pl.data[0].track.artist,
title:pl.data[0].track.title,
cover:pl.data[0].track.imageurl
}
];
});
var description = 'Welcome to SilvertoneRadio.com BETA Online player. We will be gradually improving it.';
$('body').ttwMusicPlayer(myPlaylist, {
autoPlay:false,
description:description,
jPlayer:{
swfPath:'plugin/jquery-jplayer' //You need to override the default swf path any time the directory structure changes
}
});
});
答案 0 :(得分:2)
myPlaylist
是在调用传递给ajax_playlist
的匿名函数时定义的。
该函数作为名为callback
的参数传递。
在传递给ajax
方法的成功函数中调用。
异步JavaScript和XML是异步的。
在收到并处理HTTP响应之前,不会调用success函数。
所以会发生什么:
description
已为其指定了值ttwMusicPlayer
被调用(myPlaylist
,目前为undefined
)myPlaylist
获取分配给它的值将所有依赖于myPlaylist
的代码移动到您的回调函数中。
答案 1 :(得分:1)
AJAX是异步,任何依赖于其结果的东西都必须在成功回调中调用!
在ttwMusicPlayer
区块内移动function(pl) { ... }
来电(myPlaylist = [...];
之后)