JQuery, как генерировать код внутри кода? - PullRequest
0 голосов
/ 11 апреля 2011

мой вопрос может быть немного запутанным, но вот что я хотел бы сделать.у меня есть скрипт:

<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 ]

3 голосов
/ 11 апреля 2011

Для этого можно было бы динамически генерировать код, но для этого нет никаких оснований.

Просто используйте метод 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);
});
2 голосов
/ 11 апреля 2011

Попробуйте это:

// Примечание: вызов getJSON является асинхронным, если ajaxSettings не изменены, чтобы сделать его синхронным, и, следовательно, переменной audioPlaylist присваивается значение только после завершения обратного вызова getJSON.

 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);
    });
 });
0 голосов
/ 11 апреля 2011

Приведенный выше ответ лучше всего подходит, если вы пытаетесь обновить данные. Если вы действительно хотите писать сценарии на странице, сначала соберите текст сценария, а затем выполните что-то простое, например:

$('body').append("<script type='text/javascript'>alert('hello world');<\/script>");
0 голосов
/ 11 апреля 2011
<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>
...