jQuery как сгенерировать код внутри кода?

#jquery #json #load #document.write

#jquery #json #загрузить #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>

возможно ли это? я пробовал скрипт, и он завершается неудачей.

Комментарии:

1. на самом деле не понимаю вашего вопроса.. вам нужно получать содержимое плейлиста с сервера?

Ответ №1:

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

Просто используйте 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. похоже, это работает.. я получаю некоторые undefined ошибки, но я уверен, что это проблема JSON. спасибо, ребята

Ответ №2:

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

// Примечание: вызов 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);
    });
 });
  

Ответ №3:

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

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

Ответ №4:

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