下面是一些我遇到问题的代码。基本上,我将一个空数组定义为全局变量(var playlist = []),然后尝试在jQuery $ .get调用中向其添加元素。从我在互联网上看到的内容来看,我应该可以做到这一点!以下代码给出了错误:“无法调用未定义的方法'播放'”。播放列表[0]确实在函数内设置,警告$ .get调用中的播放列表[0]给出了预期的结果,但它不会在函数外保留。
var playlist = [];
function playArtist(artist){
$.get('media/songs/' + artist,
function(data){
for (var i in data){
playlist[i] = setSong(data[i].Resource.name,'track' + data[i].Media.id,i + 1);
}
$('#track-total').text(parseInt(playlist.length));
},'json'
);
playlist[0].play();
}
有人可以帮忙吗?
谢谢!
答案 0 :(得分:6)
您不必执行任何操作。我的项目遇到了同样的问题。你要做的是在on success success回调中进行函数调用以重置全局变量。只要你将异步javascript设置为false,它就能正常工作。这是我的代码。希望它有所帮助。
var exists;
//function to call inside ajax callback
function set_exists(x){
exists = x;
}
$.ajax({
url: "check_entity_name.php",
type: "POST",
async: false, // set to false so order of operations is correct
data: {entity_name : entity},
success: function(data){
if(data == true){
set_exists(true);
}
else{
set_exists(false);
}
}
});
if(exists == true){
return true;
}
else{
return false;
}
希望这会对你有所帮助。
答案 1 :(得分:2)
有可能playlist
在$.get
返回之前被使用 - 因为ajax调用是异步的。它在成功回调中,因为一旦请求完成就会被触发,因此它将包含您期望的数据。
答案 2 :(得分:1)
.get是异步的,因此需要提供回调函数。虽然你的get仍在进行中,但你可能正在尝试使用该数组,可能在实际填充之前。