我正在尝试在成功函数中进行ajax调用。在第二个ajax调用中,我将一些数据附加到隐藏字段。就在for循环之后,alert显示隐藏字段包含数据但是当我将警报放在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);
}
});
}
答案 0 :(得分:1)
您是否验证了在整个过程完成后,DOM中没有填充隐藏字段。请记住,默认情况下$ .ajax是异步的,并且第二次ajax调用返回并在DOM中设置元素所需的往返时间比处理下一个函数所需的时间长,在这种情况下是您的后续警报。因此,在调用警报时,没有任何内容可以通过DOM实现。您可以通过以下两种方式执行此操作:1)为成功创建回调,或者2)通过使用&#34; async:false&#34;强制$ .ajax非异步。设置。我个人会选择回调方法并处理所有成功代码。您可能永远不会从该警报返回数据,除非您将ajax调用设置为非异步,无论您与服务器的连接速度有多快......即使它在同一台计算机上是本地的。
另外,我确定你有充分的理由,但是循环调用ajax调用返回的数据,然后为该数据中的每个项调用另一个ajax调用似乎效率很低。我不知道服务器代码是否可用或在您的控制之下,但是应该在服务器上创建一个新的终点,以便返回您之后的所有数据。第二个ajax电话。只是一个想法。