javascript - 带有循环的奇怪 AJAX 行为

标签 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 请求并返回一个轨道数组,带有一个回调

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循环单独执行的

albumID=1
albumID=2
albumID=3
...end

然后才执行 getTracks()

我希望对专辑的每次迭代执行 getTracks()

为什么会发生这种情况,我该如何解决?

最佳答案

如果您在使用 Javascript 异步方式时遇到问题,您可以使用 async: false 标志禁用 http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings ,但你会失去 javascript 的力量。

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

关于javascript - 带有循环的奇怪 AJAX 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30579090/

相关文章:

ruby-on-rails - 取消ajax请求导致rails抛出异常

javascript - Emberjs 1.0 : How to create Models and display them in another route?

javascript - 未捕获错误: Invalid Selector - #jqxCheckBox! 请检查使用的ID或CSS类名称是否正确

jquery - TD :hover which highlights the th for that td

javascript - 如何从 Javascript 禁用 CheckBoxList 中的项目?

javascript - 在 fadeIn 中指定的时间后刷新 Ajax 页面

javascript - 是否可以阻止 header ("location: url") 被发送到 AJAX?

javascript - Nodejs 导入失败并出现语法错误

javascript - bxSlider 不会在幻灯片图像之前加载加载动画 (bx_loader.gif)

javascript - 删除其他元素后元素不向上移动