我有一对嵌套的AJAX请求行为不正确。
第一个获取albums
的列表,第二个获取每个相册的执行,给我一个tracks
的列表。
$.ajax({
url:getPHPSite(),
method:"POST",
data:{
query: "SELECT id_album FROM albums;"
},
success: function(response){
var albums=JSON.parse(response);
for(var i=0; i<albums.length;i++){
var albumID=albums[i]['id_album'];
getTracks(function(courses) {
//do something
}
}, albumID);
}
}, ....//error handler and everything else
getTracks()
函数实际执行第二个AJAX请求并返回带有callback
function getTracks(callback, albumID){
$.ajax({
url:getPHPSite(),
method:"POST",
data:{
query: "SELECT idtracks FROM tracksWHERE id_album=" + albumID + ";"
},
success: function(response){
array_tracks=JSON.parse(response);
callback(array_tracks);
}, //...everything else
通过设置断点,我发现第一个for loop
分别执行
albumID=1
albumID=2
albumID=3
...end
然后才执行getTracks()
。
我希望每次迭代的专辑都会执行getTracks()
。
为什么会这样,我该如何解决?
答案 0 :(得分:1)
如果您遇到Javascript异步方式问题,可以使用async: false
标记http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings禁用,但是您将失去javascript权限。
我认为可以做到的一种方法是创建一个包含第一个端点的所有结果ID的数组,然后对该数组执行foreach,而不是在ajax中嵌入ajax,而只是为了代码可维护性。