嵌套的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(''+semnum+' '); $.ajax( { type: "POST", url: "returnCourses", data: "programId="+selectedprog+"&semNum="+semnum, success: function(data1) { var courses=$.parseJSON(data1); for(y in courses) { $("#table"+x).append(''+courses[y].title+' '); } } }); $("#table"+x).append('
'); } } }); } else { $("#tables").css('display','none'); } });
内部ajax调用中的回调通过引用捕获x
变量。
由于所有回调都在循环之后运行,因此它们都获得x
的当前值,这是集合中的最后一个元素。
您需要将循环中的代码移动到一个单独的函数中,该函数将x
作为参数。
变量x
的范围也可能导致问题。
代替:
for(x in semesters)
尝试:
for(var x in semesters)
这将声明x作为第一个成功ajax函数范围内的变量,而不是任何其他代码(包括jQuery)可以更改的全局变量。