从一个ajax调用发送变量到下一个

时间:2018-09-26 12:24:08

标签: javascript ajax

我正在尝试查询一个API,该API需要一个初始请求才能生成报告,它返回一个报告ID,然后在5秒钟内您可以从该报告ID中提取它。

这是我所拥有的,可以完美运行并返回reportID:

Enter dimensions 
9
wh bl wh bl wh bl wh bl wh
bl wh bl wh bl wh bl wh bl
wh bl wh bl wh bl wh bl wh
bl wh bl wh bl wh bl wh bl
wh bl wh bl wh bl wh bl wh
bl wh bl wh bl wh bl wh bl
wh bl wh bl wh bl wh bl wh
bl wh bl wh bl wh bl wh bl
wh bl wh bl wh bl wh bl wh

它返回以下内容:

$(document).ready(function(){
    $("#r2").click(function(){
        $.ajax({
        url: "report.php", 
        dataType: 'json',
        data: { 
            type: 'queue', 
            ref: 2
        },
        success: function(result){
            console.log(result.reportID);
        }});
    });
});

我试图使其在第一个ajax后面调用另一个ajax调用,以使用reportID作为数据变量“ ref”来收集报告。因此,例如,第二个ajax查询应具有{"reportID":1876222901}

ref: 1876222901

我所坚持的是我将变量从第一个ajax调用的结果传递到第二个ajax调用的方式。它似乎没有做到这一点。我应该如何将报告ID $(document).ready(function(){ $("#r2").click(function(){ $('#loading').show(); $.ajax({ url: "report.php", dataType: 'json', data: { type: 'queue', ref: 2 }, success: function(result){ console.log(result); $.ajax({ url: "report.php", dataType: 'json', data: { type: 'get', ref: result.reportID }, success: function(result){ console.log(result); } }); }}); }); }); 发送到我的第二个ajax呼叫中?

3 个答案:

答案 0 :(得分:1)

您只需使用浏览器内置的DOM API和访存API就可以在不使用jQuery的情况下完成此操作

const r2 = document.getElementById('r2')
const loading = document.getElementById('loading')

const handleAsJson = response => response.json()

const fetchRef = ({reportId}) =>
  fetch(`report.php?type=get&ref=${reportId}`)

document.onready = () => {
  r2.addEventListener('click', () => {
    loading.show();
    // you don't have to interpolate here, but in case these
    // values are variable...
    fetch(`report.php?type=${'queue'}&ref=${2}`)
      .then(handleAsJson)
      .then(fetchRef)
      .then(handleAsJson)
      .then(console.log)
  })
}

答案 1 :(得分:1)

解决方案是代替写作

ref: result.reportID

您必须这样写

ref: result.reportID.reportID

正如您所说,第一次使用console.log(result.reportID)的结果是{"reportID":1876222901}。这意味着您必须将点符号链接两次,才能在下一个ajax调用中达到值1876222901

要明确:

$(document).ready(function(){
    $("#r2").click(function(){
        $('#loading').show();
        $.ajax({
        url: "report.php", 
        dataType: 'json',
        data: { 
            type: 'queue', 
            ref: 2
        },
        success: function(result){
            console.log(result); // as you said, console.log(result.reportID) return {"reportID":1876222901}
            $.ajax({
              url: "report.php", 
              dataType: 'json',
              data: { 
              type: 'get', 
              ref: result.reportID //which means, this line would be => ref: {"reportID":1876222901}
              // we will correct it like this => ref: result.reportID.reportID
              // then we properly get => ref:1876222901
            },
            success: function(result){ 
                console.log(result); 
            }
            });
        }});
    });
});

希望它可以解决您的错误。

答案 2 :(得分:0)

我想您可以尝试在您的第一个ajax之后创建另一个调用函数

$(document).ready(function(){
    $("#r2").click(function(){
        $.ajax({
        url: "report.php", 
        dataType: 'json',
        data: { 
            type: 'queue', 
            ref: 2
        },
        success: function(result){
            console.log(result.reportID);
            callSecondAjax(result.reportID)
        }});
    });
});

现在使该功能类似

function callSecondAjax(reportId){
// do some stuff 
}