AJAX变量没有定义,但它是?

时间:2014-04-16 15:06:43

标签: javascript jquery ajax

我正在对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
            }
        });
    });

2 个答案:

答案 0 :(得分:2)

myPlaylist是在调用传递给ajax_playlist的匿名函数时定义的。

该函数作为名为callback的参数传递。

在传递给ajax方法的成功函数中调用。

异步JavaScript和XML是异步的。

在收到并处理HTTP响应之前,不会调用success函数。

所以会发生什么:

  1. 发送Ajax HTTP请求
  2. description已为其指定了值
  3. ttwMusicPlayer被调用(myPlaylist,目前为undefined
  4. 收到HTTP响应
  5. myPlaylist获取分配给它的值
  6. 将所有依赖于myPlaylist的代码移动到您的回调函数中。

答案 1 :(得分:1)

AJAX是异步,任何依赖于其结果的东西都必须在成功回调中调用!

ttwMusicPlayer区块内移动function(pl) { ... }来电(myPlaylist = [...];之后)