[英]Jquery ajax call inside success function
我正在嘗試在成功函數中進行ajax調用。 在第二個ajax調用中,我將一些數據附加到隱藏字段中。 在for循環之后,警報顯示隱藏字段包含數據,但是當我將警報放在secod ajax調用之外時,它顯示為空。 為什么隱藏字段被清除?
<input type="hidden" id="hdnMenuChild" name="hdnMenuChild" />
<script>
function loadMenue() {
var url = "/UserManagement/GetUserMenue";
$.ajax({
type: "GET",
url: url,
contentType: "application/json; charset=utf-8",
//data: { initialApplicantID: initialApplicantID },
dataType: "json",
success: function (data) {
var mUL = "";
for (var x = 0; x < data.length; x++) {
if (data[x].MenueLevel == "0" && data[x].URL!="#") {
mUL = mUL + '<li>';
mUL = mUL + '<a href=' + data[x].URL + '>';
mUL = mUL + '<span class="menu-text">' + data[x].Name + '</span>';
mUL = mUL + '</a></li>';
}
if (data[x].MenueLevel == "0" && data[x].URL == "#") {
mUL = mUL + '<li>';
mUL = mUL + '<a href=' + data[x].URL + ' class="dropdown-toggle">';
mUL = mUL + '<span class="menu-text">' + data[x].Name + '</span>';
mUL = mUL + '<b class="arrow icon-angle-down"></b>';
mUL = mUL + '</a>';
mUL = mUL + '<ul class="submenu">';
$.ajax({
type: "GET",
url: "/UserManagement/GetUserMenue?parentID=" + data[x].PermissionID,
contentType: "application/json; charset=utf-8",
//data: { initialApplicantID: initialApplicantID },
dataType: "json",
success: function (datay) {
for (var y = 0; y < datay.length; y++) {
$("#hdnMenuChild").val($("#hdnMenuChild").val() + '<li>');
$("#hdnMenuChild").val($("#hdnMenuChild").val() + '<a href=' + datay[y].URL + '>');
$("#hdnMenuChild").val($("#hdnMenuChild").val() + '<i class="icon-double-angle-right"></i>');
$("#hdnMenuChild").val($("#hdnMenuChild").val() + datay[y].Name);
$("#hdnMenuChild").val($("#hdnMenuChild").val() + '</a></li>');
}
alert($("#hdnMenuChild").val());//here, alert shows data.
}
});
alert($("#hdnMenuChild").val());//alert shows empty data here
mUL = mUL + '</ul>';
mUL = mUL + '</li>';
}
}
$("#userMenue").html(mUL);
}
});
}
在整個過程完成之后,您是否已驗證DOM中沒有填充隱藏字段? 請記住,$。ajax默認情況下是異步的,並且第二個ajax調用返回並在DOM中設置您的元素所花費的往返時間比處理下一個函數所花費的時間更長,在這種情況下,您將收到以下警報。 因此,在調用警報時,沒有任何東西可以到達DOM。 您可以通過以下兩種方法執行此操作:1)創建成功的回調,或2)使用“ async:false”設置強制$ .ajax非異步。 我個人會選擇回調方法並處理所有成功代碼。 除非您使ajax調用不異步,否則即使您與服務器的連接速度如此之快,也可能永遠不會從該警報返回任何數據,即使它在同一台計算機上是本地的。
另外,我確定您有充分的理由,但是遍歷從ajax調用返回的數據,然后為該數據中的每個項目調用另一個ajax調用似乎效率很低。 我不知道服務器代碼是否不可用或不受您控制,但是可能應該在服務器上創建一個新的端點來命中,它將返回您在第二個ajax調用中所需要的所有數據。 只是一個想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.