Отправить PHP-ответ JSON от вызова API как часть функции успеха AJAX - PullRequest
0 голосов
/ 04 апреля 2019

Я настроил страницу, которая берет данные из формы, сериализует в JSON, а затем использует AJAX для вызова файла PHP, чтобы обработать данные формы и отправить их в API через cURL.

Как я могу получить ответ от API, чтобы он возвращался как часть функции успеха AJAX?

В начале моего проекта я смог сделать это, потому что я использовал php в качестве включения. Но не может использовать этот метод, потому что файл выполняется из вызова AJAX, а не из include.

Я пытался следовать этому учебнику , но просто продолжал ловить ошибки.

Я также изучил, рассмотрел и попробовал больше предложений из различных сообщений на этом сайте, чем я могу даже сосчитать. Теперь я прошу помощи.

Вот соответствующий ajax в моем файле index.php .

$.ajax
({
    type: "POST",
    dataType : 'json',
    async: false,
    url: 'save_application.php',
    data: { filename: fileName,  applicationData: jsonFormString, job: adid },
    success: function () { console.log("done");},
    failure: function() {console.log('error');}
});

А вот соответствующая часть файла save_application.php .

$curl = curl_init();

curl_setopt_array($curl, array(
  //stuff here
));

$applicantresponse = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

И, наконец, ответ $ Applicant , который возвращается, отформатирован так:

{
  "applicationId": 123456789,
  "links": {
    "link1": "https://thisisalinkforLINK1.html", //THIS IS THE VALUE I WANT
    "link2": "https://thisisalink.html",
    "link3": "https://thisisalink.html"
  }
}

В конечном счете, я хочу установить переменную в значение для links-> resume (например: var resumeLink = (something goes here); \\returns https://thisisalinkforLINK1.html) обратно в мой index.php в рамках функции успеха, чтобы я мог использовать этот ответ для некоторых других задач.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Похоже, save_application.php использует данные, отправленные $.ajax для запроса скручивания, и вам необходимо отправить часть ответа скручивания обратно клиенту для использования в функции успеха.

Ответ curl уже JSON, поэтому самое простое, что нужно сделать, это просто

echo $applicantresponse;

, который отправит полный ответ curl обратно клиенту.

Если вы хотите отправить только одну из ссылок, вам необходимо декодировать ее и извлечь конкретный фрагмент, который вы хотите, а затем перекодировать этот фрагмент.

$applicantresponse = json_decode($applicantresponse);
$link = $applicantresponse->links->link1;
echo json_encode($link);
0 голосов
/ 04 апреля 2019

Вам нужно вывести $applicantresponse из вашего save_application.php файла, чтобы он вернулся в ваш код вызова, и вам нужно изменить функцию success в вашем коде ajax, чтобы затем использовать эти данные.Это будет выглядеть примерно так:

$applicantresponse = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

echo json_encode($applicantresponse);

, а затем ...

$.ajax
({
    ...
    success: function (data) {
        console.log(data.links.link1);
        // do something with the data that was returned
    },
    ...
});

Важно то, что ваш php-код не выводит любой другой текст для клиента.Все остальные echo, print, отладочные вызовы, все эти вещи должны быть удалены, потому что в противном случае вы не отправляете обратно действительные закодированные в json данные, которые jQuery знает, как интерпретировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...