嵌套的AJAX调用

mys*_*ous 0 ajax jquery

在第一个ajax调用服务器返回一个转换为js数组的json字符串.我想为数组的每个元素运行一个ajax调用.

例如,第一个ajax调用返回第1,2,3,4个学期.现在我想要检索第一学期的科目并在表格中显示它们,然后检索第二学期的科目并在表格中显示所有科目等等......

我写了一个代码,但它显示了最后一个表中的所有主题.有人能帮我吗?

$.ajax(
       {
           type: "POST",
           url: "returnSemesterNumbers",
           data: "programId="+selectedprog,
           success: function(data)
           {
                var semesters=$.parseJSON(data);
                for(x in semesters)
                {
                    semnum=semesters[x].semesterNumber;
                    alert(semnum);
                    $("#tables").append('<table id=table'+x+' style=float:left><tr><td>'+semnum+'</td></tr>');
                    $.ajax(
                           {
                               type: "POST",
                               url: "returnCourses",
                               data: "programId="+selectedprog+"&semNum="+semnum,
                               success: function(data1)
                               {
                                   var courses=$.parseJSON(data1);
                                    for(y in courses)
                                    {
                                        $("#table"+x).append('<tr><td>'+courses[y].title+'</td></tr>');
                                    }
                               }
                             });
                    $("#table"+x).append('</table>');
                    }
               }
             });
            }
            else
            {
                $("#tables").css('display','none');
            }
});
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 6

内部ajax调用中的回调x通过引用捕获变量.

由于所有回调都在循环之后运行,因此它们都获得当前值x,这是集合中的最后一个元素.

您需要将循环中的代码移动到一个单独的函数中,该函数x作为参数.