jquery.getJSON
내에서 jquery.each()
기능을 사용할 때 문제가 있습니다. 이 경우에는 내 코드에서 다루는 두 가지 유형의 요소가 있습니다. "소스"와 "스트림" 먼저 소스를 가져 와서 반복하고 그 중 아코디언 헤더를 생성하려면 getJSON
을 사용하고 싶습니다. 그런 다음 해당 "소스"각각에 대해 다시 해당 소스의 ID와 함께 getJSON
을 사용하여 해당하는 "스트림"을 얻습니다. 그런 다음 해당 소스를 소스 아코디언 본문에 추가하여 소스별로 정렬 된 모든 스트림의 목록을 가져옵니다.
하지만 JSON을 얻는 동안 내 프로 시저의 다음 명령문이 이미 실행 된 것 같습니다. 기본적으로 큰 HTML String을 동적으로 만들고 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()
기능은 '아무튼 것 때문에에서 "정의되지 않은"이 아코디언 헤더 인 다음과 같이
코드가 보인다 html 문자열이 DOM에 추가되기 전에 반환됩니다.
이미 내 $.getJSON
통화 모두에 async = false
와 $.ajax
에 $.getJSON
을 변경 시도,이 문장은 내가 그들이 원하는 순서대로 실행되지 않는 문제를 해결하기 위해 보이지만 그것은 끔찍하게 느린과 undefined를 반환 어쨌든 웬일인지 ..
어떤 제안이라도? 정말 바보 같은 것을 놓치고 있습니까?
서버에 html을 생성하는 것이 좋습니다. 이후 루프에서 클라이언트 끝에서 사용자 입력을 필요로하지 않기 때문에. 따라서 서버에서 html 문자열을 생성하는 것이 더 좋을 것입니다. 이보다 훨씬 빨라질 것입니다. 또는 어떤 경우 에든 디자인이 필수적이라면 option cache : false 및 async : false를 사용하여 $ .ajax를 시도하십시오. – Priyank
녹아웃 및 각도와 같은 적절한 mvvm 라이브러리가있을 때 jQuery에서이 작업을 시도해 보는 것이 미친 것입니다. – andrew