在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