在jquery.getJSON
中使用jquery.each()
函数时出现问题。 在这种情况下,我在代码中处理的元素有两种类型。 “Sources”和“Streams” 我想使用getJSON
首先获取源代码,对它们进行迭代并生成手风琴标头。然后,对于这些“来源”中的每一个,我再次使用getJSON
与该来源的ID来获取它的相应“流”。然后,我将这些流添加到它的源手风琴体中,以获取所有流的列表,并根据它们的来源进行排序。
但是,当我得到JSON时,我的过程中的下一个语句已经被执行。由于我基本上是动态构建一个大的HTML字符串并使用jQuery将其添加到元素,因此字符串不会获取所需的所有数据。
的代码如下:
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()
功能没有按”“不确定”在html字符串被添加到DOM之前返回。
我已经尝试过与async = false
改变$.getJSON
到$.ajax
,在我的两个$.getJSON
调用,这似乎解决了报表不我希望他们的顺序执行的问题,但它是可怕的缓慢和返回undefined无论如何由于某种原因..
有什么建议吗? 我错过了一些真正愚蠢的东西吗?
这将是很好的生成服务器上的html。因为它不需要客户端在循环中输入任何用户输入。因此,在服务器上生成该html字符串将会更好。这将更快。或者,如果您的设计是强制性的,那么请尝试带有选项缓存的$ .ajax:false和async:false。 – Priyank 2014-09-04 10:29:24
这是疯狂的尝试,并在jQuery做这个东西,当有适当的mvvm库像淘汰赛和角 – andrew 2014-09-04 10:33:52