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

时间:2011-01-06 12:04:17

标签: 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();
}

有人可以帮忙吗?

谢谢!

3 个答案:

答案 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仍在进行中,但你可能正在尝试使用该数组,可能在实际填充之前。