无法在函数中的jQuery $ .get中访问全局变量

下面是一些我遇到问题的代码。 基本上,我将一个空数组定义为全局变量(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(); } 

有人可以帮忙吗?

谢谢!

有可能, playlist$.get返回之前被使用 – 因为ajax调用是异步的。 它成功回调中起作用因为一旦请求完成就会被触发,因此它将包含您期望的数据。

你不必做任何这些。 我的项目遇到了同样的问题。 你要做的是在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; } 

希望这对你有所帮助。

.get是异步的,因此需要提供回调函数。 虽然你的get仍在进行中,但你可能正在尝试使用该数组,可能在实际填充之前。