0
하나의 jquery 아약스 호출이 다른 내부에 중첩되어 있습니다. 두 번째 호출은 작동하지만 두 번째 호출의 성공을 반환하려고하는 채워진 var은 호출 함수에서 정의되지 않은 상태가됩니다. 여기에 코드입니다 : 내가 htmlString getSuggestionsString 내에서 잘 반환하기 전에 필요한 것을 포함, 방화범이 단계별 때jquery 중첩 된 아약스 문제
function writeMedsToTable(meds) {
var htmlString;
if (meds.length > 0) {
htmlString = "<h3>Which of these is it?</h3>";
htmlString += "<table cellpadding=\"0\" cellspacing=\"0\" class=\"jtable\"><tbody>";
for (i = 0; i < meds.length; i++) {
htmlString += "<tr><td>"
+ "<input type=\"image\" class=\"newMedSelector\" src=\"Thumb.aspx?img=" + meds[i].RxCui.toString() + "&w=75&h=75\" rxcui=\""
+ meds[i].RxCui.toString() + "\">"
+ meds[i].BrandName + " " + meds[i].Strength + " " + meds[i].Route + "</td></tr>";
}
htmlString += "</tbody></table>";
} else {
htmlString = getSuggestionsString();
}
$("div#SearchResults").html(htmlString);
$("div#SearchResults").css({
padding: "10px",
color: "#FF0000"
});
$("div#SearchResults").show(500);
}
function getSuggestionsString() {
var dto = { medName: $("#TextBoxMedNameLookup").val() };
$.ajax({
type: "post",
contentType: "application/json; charset-utf-8",
dataType: "json",
url: "/Users/MedicationAddNew.aspx/GetSuggestions",
data: JSON.stringify(dto),
success: function(response) {
var suggestions = response.d;
var htmlString = "<h3>No results returned. Did you mean one of these?</h3>";
htmlString += "<table cellpadding=\"0\" cellspacing=\"0\" class=\"jtable\"><tbody>";
for (i = 0; i < suggestions.length; i++) {
htmlString += "<tr><td>"
+ "<a href=\"#\">"
+ suggestions[i]
+ "</a>"
+ "</td></tr>";
}
htmlString += "</tbody></table>";
return htmlString; // contains expected string
}
});
}
...
$("input#ButtonSubmitMedNameLookup").click(function(evt) {
evt.preventDefault();
var dto = { medName: $("#TextBoxMedNameLookup").val() };
$.ajax({
type: "post",
contentType: "application/json; charset-utf-8",
dataType: "json",
url: "/Users/MedicationAddNew.aspx/LookupMed",
data: JSON.stringify(dto),
success: function(response) {
var meds = response.d;
writeMedsToTable(meds);
}
});
... 그리고 더 아래로 내 codefile에서, writeMedsToTable의 htmlString은 호출 후에 정의되지 않습니다.
나는 그것을 얻지 않는다. 도와주세요.
편집 : 글쎄, 난 여전히 위의 코드 문제가 뭔지 모르겠다. 하지만 내 목적을 위해, 해결 방안으로, 다음과 같이 대상 div를 다시 선택하면 작동합니다.
function getSuggestionsString() {
var dto = { medName: $("#TextBoxMedNameLookup").val() };
$.ajax({
type: "post",
contentType: "application/json; charset-utf-8",
dataType: "json",
url: "/Users/MedicationAddNew.aspx/GetSuggestions",
data: JSON.stringify(dto),
success: function(response) {
var suggestions = response.d;
var htmlString = "<h3>No results returned. Did you mean one of these?</h3>";
htmlString += "<table cellpadding=\"0\" cellspacing=\"0\" class=\"jtable\"><tbody>";
for (i = 0; i < suggestions.length; i++) {
htmlString += "<tr><td>"
+ "<a href=\"#\">"
+ suggestions[i]
+ "</a>"
+ "</td></tr>";
}
htmlString += "</tbody></table>";
$("div#SearchResults").html(htmlString);
}
});
}
내 이상은 아니지만 작동합니다.
감사합니다 그것을보고하고 자상을내어 : 아래 시도로 아약스에 대한 잘못된 설정 매개 변수 : 비동기를 포함하도록 getSuggestionsString을 변경 . 나는 비동기를 시도 : false하지만 여전히 작동하지 않았다. htmlstring을 반환하지 않고 대신 getSuggestionsString 내부에서 div를 선택하여 html을 삽입하기로 결정했습니다. – Marvin
다행이라고 생각합니다. async : false가 문제를 해결하지 못한 이유를 알아낼 수 없습니다 ... – Chandu