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