嵌套的AJAX调用

时间:2010-10-08 17:06:55

标签: jquery ajax

在第一个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');
            }
});

2 个答案:

答案 0 :(得分:6)

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

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

您需要将循环中的代码移动到以x作为参数的单独函数中。

答案 1 :(得分:1)

变量x的范围也可能导致问题。

而不是:

for(x in semesters)

尝试:

for(var x in semesters)

将x声明为第一个成功ajax函数范围内的变量,而不是任何其他代码(包括jQuery)可以更改的全局变量。