jQuery如何在代码中生成代码?

时间:2011-04-11 18:48:36

标签: jquery json load document.write

我的问题可能有点令人困惑,但这就是我想做的事情。 我有一个脚本:

<script>
   ...some script here...
    var audioPlaylist = new Playlist("2", [
    {
        name:"Lismore",
        mp3:"http://example.com/song.mp3"
    },
    {
        name:"The Separation",
        mp3:"http://example.com/song1.mp3"
    }
 ])
</script>

我想要做的是使用$ .get.JSON

动态生成该脚本
var audioPlaylist = new Playlist("2", [
$.getJSON('http://www.example.com/users', function(data) {
$.each(data, function(i,item) {
document.write(name: ''item.fname'',)
document.write(mp3: "http://example.com/"''+item.song_id+''".mp3")
}):
});
])

<script>

内 这可能吗?我已经尝试过这个剧本而且失败了。

4 个答案:

答案 0 :(得分:3)

有可能动态生成代码来执行此操作,但没有理由这样做。

只需使用map方法将您从AJAX调用获得的数据数组转换为Playlist对象所需的表单:

$.getJSON('http://www.example.com/users', function(data) {
  var items = $.map(data, function(item) {
    return { name: item.fname, mp3: "http://example.com/" + item.song_id + ".mp3" };
  });
  var audioPlaylist = new Playlist("2", items);
});

答案 1 :(得分:2)

试试这个:

//注意:getJSON调用是异步的,除非修改ajaxSettings使其同步,因此只有在getJSON的回调完成后才为audioPlaylist变量赋值。

 var audioPlaylist = null; 
 $.getJSON('http://www.example.com/users', function(data) {
    var playData = [];
  $.each(data, function(i,item) {
        playData.push({
            name:item.fname, 
            mp3: "http://example.com/" + item.song_id + ".mp3"
        });
        audioPlaylist = new Playlist("2", playData);
         alert(audioPlaylist);
    });
 });

答案 2 :(得分:0)

<script>
//Song Object
function Song(name, mp3){
  this.name = name;
  this.mp3 = mp3;
}

//Create array of Song objects
var songs = new Array();

//Populate it from the AJAX call
$.getJSON('http://www.example.com/users', function(data) {
   $.each(data, function(i,item) {
       songs.push(new Song(item.fname, "http://example.com/" + item.song_id + ".mp3"));
   }):
});

//build the Playlist Object
var audioPlaylist = new Playlist("2",songs);
</script>

答案 3 :(得分:0)

如果您尝试更新数据,则上述答案最佳。如果你真的想要编写脚本到页面,首先要编写脚本文本,然后做一些简单的事情,如:

$('body').append("<script type='text/javascript'>alert('hello world');<\/script>");