Отправка переменной из одного вызова ajax в следующий - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть API, который я пытаюсь запросить, который требует первоначального запроса для создания отчета, он возвращает идентификатор отчета, а затем через 5 секунд вы можете извлечь его из этого идентификатора отчета.

Этото, что у меня есть, которое работает отлично и возвращает reportID:

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

Это возвращает это:

{"reportID":1876222901}

Я пытаюсь заставить его вызвать еще один вызов ajax в конце первогоодин для сбора отчета с использованием reportID в качестве переменных данных «ref».Так, например, второй запрос ajax должен иметь ref: 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);
            $.ajax({
            url: "report.php", 
            dataType: 'json',
            data: { 
            type: 'get', 
            ref: result.reportID
            },
            success: function(result){
                console.log(result);
            }
            });
        }});
    });
});

То, с чем я застрял - это способ передачи переменной из результата первого вызова ajax во второй.Кажется, он этого не делает.Как мне отправить мой отчетный идентификатор 1876222901 во второй вызов ajax, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Решение вместо написания

ref: result.reportID

Вы должны написать это так

ref: result.reportID.reportID

Потому что, как вы сказалипри первом использовании console.log(result.reportID) результат будет {"reportID":1876222901}.Это означает, что вам нужно дважды соединять точечные обозначения, чтобы иметь возможность достичь значения 1876222901 в следующем вызове ajax.

Для ясности:

$(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); 
            }
            });
        }});
    });
});

Надеюсь, это исправит вашу ошибку.

0 голосов
/ 26 сентября 2018

Я думаю, вы можете попытаться создать другую функцию для вызова после вашего первого 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 
}
0 голосов
/ 26 сентября 2018

Вы можете сделать это без jQuery, просто используя встроенные в браузер API DOM и API извлечения

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)
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...