У меня проблема при использовании функции jquery.each()
в пределах jquery.getJSON
. В этом случае в моем коде есть два типа элементов. «Источники» и «Потоки» Я хочу использовать getJSON
, чтобы сначала получить источники, перебрать их и создать из них заголовок гармошки. Затем для каждого из этих «источников» я снова использую getJSON
с идентификатором этого источника, чтобы получить соответствующие «потоки». Затем я добавляю эти потоки к своим источникам аккордеона, чтобы получить список всех потоков, отсортированных по их источникам.
Но, кажется, пока я получаю JSON, следующие операторы в моей процедуре уже выполнены. Поскольку я в основном динамически создаю большую строку HTML и добавляю ее к элементу с помощью jQuery, String не получает все необходимые ему данные.
Код выглядит следующим образом:
var html1 = "<div class='panel-group' id='manageAccordion'>";
$.getJSON(url, function(data){
$.each(data, function(i, json){
html1 += getAccordionPart(...); //creates the accordion for the given source
});
}).done(function(){
html1 += "</div>";
$('#elementList').html(html);
});
function getAccordionPart(id, parent, count, json){
//new string html2 is created and a bunch of stuff added
//...
html2 += "....";
html2 += getAccordionBody(json);
html2 += "</div></div></div></div>";
return html2
}
function getAccordionBody(json){
//new string "html3" gets created
//...
var url = standardUrl + "sources/" + encodeURIComponent(json.elementId) + "/streams";
$.getJSON(url, function(data) {
$.each(data, function(i, json) {
html3 += "<li class='list-group-item'>";
html3 += json.name;
html3 += "</li>";
});
}).done(function(){
html3 += "</ul>";
return html3;
});
}
Что конкретно в конечном итоге является аккордеон заголовка, который имеет «неопределенный» в этом теле, , потому что, кажется, функция getAccordionBody()
Безразлично» t до того, как строка html добавится в DOM.
я уже попытался изменить $.getJSON
к $.ajax
с async = false
, на оба моих $.getJSON
звонков, это, кажется, чтобы решить эту проблему, что операторы не выполнять в порядке, я хочу их, но это ужасно медленно и возвращает неопределенное значение в любом случае почему-то ..
Любые предложения? Я пропустил что-то действительно глупое?
Будет полезно сгенерировать html на сервере. Поскольку доза не требует ввода пользователем с конца клиента в цикле. Поэтому лучше создать такую строку html на сервере. Это будет намного быстрее. В любом случае, если ваш проект является обязательным, попробуйте $ .ajax с кешем опций: false и async: false. – Priyank
Это безумие, чтобы попытаться сделать этот материал в jQuery, когда есть подходящие библиотеки mvvm, такие как нокаут и угловой – andrew