在第一个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');
}
});
答案 0 :(得分:6)
内部ajax调用中的回调通过引用捕获x
变量。
由于所有回调都在循环之后运行,因此它们都获得当前值x
,这是集合中的最后一个元素。
您需要将循环中的代码移动到以x
作为参数的单独函数中。
答案 1 :(得分:1)
变量x
的范围也可能导致问题。
而不是:
for(x in semesters)
尝试:
for(var x in semesters)
将x声明为第一个成功ajax函数范围内的变量,而不是任何其他代码(包括jQuery)可以更改的全局变量。