内部ajax从for循环jquery获得递增变量

时间:2018-02-06 08:05:57

标签: javascript jquery ajax

我在另一个内部有2个ajax请求。我想使用第二个中的第一个数据结果(如下所示)。我的问题是我得到undefined,因为索引在第二个ajax中已经增加了。我想知道如何获得未递增的z的索引或值,以便我可以在第二个ajax中使用。我使用的解决方案是将所有请求放在ajax的.done()中,但它没有解决。

  

欢迎任何更清洁的解决方案。

     

任何建议都表示赞赏。

$.ajax({
  type: 'POST',
  url: 'php1.php',
  dataType: "json",
  data: {
    id: id
  },
  success: function(data) {
  }
}).done(function(data) {
  for (var z = 0; z < data.length; z++) {
    var tdata = [];
    console.log(z); //value is 0
    tdata[z] = data[z];

    $.ajax({
      type: 'POST',
      url: 'php2.php',
      dataType: "json",
      data: {
        id: tdata[z].id //working
      },
      success: function(data) {
        console.log(z); //value is 1
      }
    }).done(function(data) {
      console.log(tdata);
      console.log(z); // value is 1 should be 0
      console.log(tdata[z].id); // id undifined because index is more than 1
    });
  }
});

3 个答案:

答案 0 :(得分:0)

试试这个:

$.ajax({
  type: 'POST',
  url: 'php1.php',
  dataType: "json",
  data: {
    id: id
  },
  success: function(data) {
  }
}).done(function(data) {
  for (var z = 0; z < data.length; z++) {
    var tdata = [];
    console.log(z); //value is 0
    tdata[z] = data[z];

    $.ajax({
      type: 'POST',
      url: 'php2.php',
      dataType: "json",
      data: {
        id: tdata[z].id //working
      },
      success: function(tdata) {
        console.log(z); //value is 1
      }
    }).done(function(tdata) {
      console.log(tdata);
      console.log(z); // value is 1 should be 0
      console.log(tdata[z].id); // id undifined because index is more than 1
    });
  }
});

答案 1 :(得分:0)

您应该使用闭包为z的每个值创建单独的ajax请求 并确保将返回的json转换为数组(数据)

grid.on("KeyUp", function (e) {
            if (e.key === "Tab") {
                console.log("Navigate to next cell");
            }
        });

答案 2 :(得分:0)

这可能是由于同步,下面的代码和检查。 async:false,

$.ajax({
      type: 'POST',
      url: 'php2.php',
      dataType: "json",
      async: false,
      data: {
        id: tdata[z].id //working
      },
      success: function(tdata) {
        console.log(z); //value is 1
      }
    })