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

Wil*_*ill 6 javascript jquery global-variables

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

有人可以帮忙吗?

谢谢!

Dom*_*Dom 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;
}
Run Code Online (Sandbox Code Playgroud)

希望这对你有所帮助.


kar*_*m79 2

很可能,在返回playlist之前就被使用了$.get- 因为 ajax 调用是异步的。它在成功回调中工作,因为请求完成后会触发该回调,因此它将包含您期望的数据。