Javascript Jquery ajax调用内部成功函数
我试图在success函数中进行ajax调用。在第二个ajax调用中,我将向一个隐藏字段添加一些数据。就在for循环之后,alert显示隐藏字段包含数据,但当我将alert放在secod ajax调用之外时,它显示为空。为什么隐藏的字段会被清除Javascript Jquery ajax调用内部成功函数,javascript,jquery,ajax,jquery-ui,Javascript,Jquery,Ajax,Jquery Ui,我试图在success函数中进行ajax调用。在第二个ajax调用中,我将向一个隐藏字段添加一些数据。就在for循环之后,alert显示隐藏字段包含数据,但当我将alert放在secod ajax调用之外时,它显示为空。为什么隐藏的字段会被清除 <input type="hidden" id="hdnMenuChild" name="hdnMenuChild" /> <script> function loadMe
<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);
}
});
}
函数loadMenue(){
var url=“/UserManagement/GetUserMenue”;
$.ajax({
键入:“获取”,
url:url,
contentType:“应用程序/json;字符集=utf-8”,
//数据:{InitialApplicationId:InitialApplicationId},
数据类型:“json”,
成功:功能(数据){
var mUL=“”;
对于(var x=0;x';
mUL=mUL+'';
}
if(数据[x].MenueLevel==“0”&&data[x].URL==“#”){
mUL=mUL+'';
mUL=mUL+“”;
mUL=mUL+”;
$.ajax({
键入:“获取”,
url:“/UserManagement/GetUserMenue?parentID=“+data[x].PermissionID,
contentType:“应用程序/json;字符集=utf-8”,
//数据:{InitialApplicationId:InitialApplicationId},
数据类型:“json”,
成功:功能(数据Y){
对于(变量y=0;y);
$(“hdnMenuChild”).val($(“hdnMenuChild”).val()+'
);
}
警报($(“#hdnMenuChild”).val();//此处,警报显示数据。
}
});
警报($(“#hdnMenuChild”).val();//警报在此处显示空数据
mUL=mUL+'';
mUL=mUL+'';
}
}
$(“#userMenue”).html(mUL);
}
});
}
您是否验证了在整个过程完成后不会在DOM中填充隐藏字段。请记住,$.ajax在默认情况下是异步的,第二个ajax调用返回并在DOM中设置元素所需的往返时间比处理下一个函数所需的时间要长,在本例中,您将收到以下警报。因此,在调用警报时,没有任何东西进入DOM。您可以通过两种方式来实现这一点:1)为成功创建回调,或2)通过使用“async:false”设置强制$.ajax为非异步。我个人会选择回调方法并处理所有成功代码。但是,除非您使ajax调用非异步,否则您可能永远不会从该警报返回数据,无论您与服务器的连接有多快。。即使它在同一台机器上是本地的
另外,我相信您有一个很好的理由,但是循环从ajax调用返回的数据,然后为该数据中的每个项调用另一个ajax调用似乎效率很低。我不知道服务器代码是否不可用或在您的控制下,但是可能应该在服务器上创建一个新的端点来命中它,它将在第二次ajax调用中返回您要查找的所有数据。只是想一想。因为在发出警报时,第二个ajax调用尚未发出。ajax调用是异步的,所以完成后需要发生的任何事情都需要进入成功回调。在我的例子中,由于它是一个菜单,ajax调用希望从数据库中读取10-15个以上的项。因此,我认为会有一个严重的性能问题。请记住,对于一些并发用户来说,这是很好的。。对于成百上千的并发用户来说,这将给您的服务器带来一点额外的费用。我不知道您的项目的交付范围,但您需要记住,不必要的处理会不必要地使用资源。;)