Анализировать данные из ответа API, вызывать функцию до получения параметра - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь вызвать API с помощью jQuery. Поскольку я новичок в jQuery, я столкнулся с некоторыми проблемами.

Сначала я получаю электронное письмо с URL-адреса, используя PHP, например: <?php $email = $_GET['email']; ?>

Затем мне нужно передать значение $email в функции ниже:

function jsCall() {
  var settings = {
    "url": "url to api",
    "method": "POST",
    "timeout": 0,
    "headers": {
      "Content-Type": "application/json"
    },
    // email is dynamic, should pass value from php
    "data": JSON.stringify({"email": "test@gmail.com"}),
  };

  $.ajax(settings).done(function(response) {
    console.log(response);
    var obj = (JSON.stringify(response));

    //get code, if code is empty call function again in 35 sec
    var code = obj.code; //returns NULL
  });
}

Когда я console.log (ответ), я получаю

data:Array(1)
  0:
    code:"12315135486132"

console.log(code) возвращает null

Мне нужно позвонить jsCall() 30 se c после страница загружается. Затем, если code пуст, мне нужно запускать скрипт каждые 35 секунд. Когда code имеет значение, мне нужно перенаправить страницу на final.php?code=(code_value)

Первый вызов функции:

setTimeout(function() { jsCall() }, 8000);  

1 Ответ

1 голос
/ 07 мая 2020

Первая проблема, которую вы должны отметить, заключается в том, что, учитывая вывод консоли, который вы показываете, вы должны использовать response[0].code для доступа к значению, поскольку ответ на запрос представляет собой массив объектов. Строкование не обязательно и вызовет проблемы с тем, как вы пытаетесь получить доступ к свойствам.

Во-вторых, все, что вам нужно, это условие if в обратном вызове AJAX, чтобы либо перенаправить, либо установить таймер для повторного вызова AJAX. Попробуйте это:

function jsCall() {
  var settings = {
    "url": "url to api",
    "method": "POST",
    "timeout": 0,
    "headers": {
      "Content-Type": "application/json"
    },
    "data": JSON.stringify({ "email": "<?= $email ?>" }),
  };

  $.ajax(settings).done(function(response) {
    let code = response.data[0].code;
    if (code) {
      window.location.assign('final.php?code=' + code);
    } else {
      setTimeout(jsCall, 35000); // make AJAX call again in 35 seconds
    }
  });
}

setTimeout(jsCall, 30000); // call 30 seconds after loading
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...