循环中奇怪的AJAX行为

时间:2015-06-01 16:59:27

标签: javascript jquery ajax

我有一对嵌套的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()

为什么会这样,我该如何解决?

1 个答案:

答案 0 :(得分:1)

如果您遇到Javascript异步方式问题,可以使用async: false标记http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings禁用,但是您将失去javascript权限。

我认为可以做到的一种方法是创建一个包含第一个端点的所有结果ID的数组,然后对该数组执行foreach,而不是在ajax中嵌入ajax,而只是为了代码可维护性。