Javascript 通过AJAX函数进行循环-导致无限循环

Javascript 通过AJAX函数进行循环-导致无限循环,javascript,jquery,Javascript,Jquery,我被这件事缠住了。我有一个function,我想调用functionB(我的API调用),并让它返回数据的结果。API是“队列”和“获取”类型。它应该是这样运行的: 使用“队列”类型运行API查询 收集返回的reportID 使用“get”类型和reportID运行API查询 将数据收集到myfunction中 这是我当前的代码: function myfunction() { var ref; var type = "queue"; var metric = "pageviews"

我被这件事缠住了。我有一个function,我想调用functionB(我的API调用),并让它返回数据的结果。API是“队列”和“获取”类型。它应该是这样运行的:

  • 使用“队列”类型运行API查询
  • 收集返回的reportID
  • 使用“get”类型和reportID运行API查询
  • 将数据收集到myfunction中
  • 这是我当前的代码:

    function myfunction() {
      var ref;
      var type = "queue";
      var metric = "pageviews";
      var post = getReport(ref, type, metric);
        post.done(function (r) {
            console.log (r);
            }
        );
    }
    
    function getReport(ref, type, metric) {
       return $.ajax({
            url: "report.php", 
            dataType: 'json',
            data: { 
                ref: ref,
                type: type, 
                metric: metric
            }
        });
    }
    
    这个很好用。但是,对于查询的第二部分,我无法使循环正常工作。这就是我所尝试的:

    function myfunction() {
      var ref;
      var type = "queue";
      var metric = "pageviews";
      var post = getReport(ref, type, metric);
        post.done(function (r) {
            if (type == "queue")
            {
            myfunction(r.reportID,"get");
            }
            else if (type == "get")
            {
            console.log(r);
            }
        );
    }
    

    我一直在覆盖type的值,这似乎会导致无限循环。

    这里有一个基本解决方案,可以链接(实际上:嵌套)API调用:

    function myfunction(ref) {
      getReport(ref, "queue", "pageviews").done(function(r1) {
        getReport(r1.reportID, "get", null).done(function(r2) {
          console.log(r2);
        })
      });
    }
    
    function getReport(ref, type, metric) {
      return $.getJSON("report.php", {
        ref: ref,
        type: type,
        metric: metric
      });
    }
    

    (我在猜测你的API是如何工作的/它返回了什么,但它应该很容易适应)

    你在哪里将
    type
    的值从
    queue
    更改为
    get
    另外,你还需要为你的函数添加参数。@ThoVu当我调用函数myfunction(r.reportID,“get”);但即使我把它放回函数中,它仍然会被覆盖。你试图解决一个本来不应该存在的问题。为什么要在那里调用递归的
    myfunction
    ?当您执行
    myfunction(r.reportID,“get”)
    只需完全忽略
    “get”
    。不仅有
    myfunciton
    没有参数,即使它有参数,您还通过将其硬编码为“队列”来隐藏
    type
    ——谢谢您,克里斯,这太棒了