嵌套的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(''); $.ajax( { type: "POST", url: "returnCourses", data: "programId="+selectedprog+"&semNum="+semnum, success: function(data1) { var courses=$.parseJSON(data1); for(y in courses) { $("#table"+x).append(''); } } }); $("#table"+x).append('
'+semnum+'
'+courses[y].title+'
'); } } }); } else { $("#tables").css('display','none'); } });

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

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

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

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

代替:

 for(x in semesters) 

尝试:

 for(var x in semesters) 

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