Использование fetch () для получения JSON из файла PHP - PullRequest
0 голосов
/ 29 октября 2018

У меня есть следующий файл data.php:

$command = $_REQUEST["command"];
$APIKey = "*******************";

if(!isset ($_REQUEST["command"]))
{
    echo "You didn't provide a valid API command";
}
else
{
  switch($command)
  {
    case "get_token" :
      $dataArr = array("token" => "Bearer " . $APIKey);
      echo json_encode($dataArr, JSON_PRETTY_PRINT);
      break;
    default:
      echo "Incorrect API command";
      break;
   }
}

Это означает, что я должен предоставить конкретную команду в запросе, чтобы получить данные. Это работает нормально, если я использую jQuery $.getJSON() метод:

$.getJSON(
  'php/data.php',
  {
    command: "get_token"
  }, (result) => {
    this.myToken = result.token;
  });

Однако я хочу попробовать и использовать метод fetch(). Итак, я попробовал это:

fetch('php/data.php', {
  method: "GET",
  mode: "cors",
  cache: "no-cache",
  credentials: "same-origin",
  headers: {"Content-Type": "application/json; charset=utf-8"},
  body: JSON.stringify({command: "get_token"}),

}).then(result => {
  console.log('fetch', result);
  this.myToken = result.token;
})

В этом случае я получаю это сообщение об ошибке: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.

Я пытался использовать его с методом POST, пробовал только с ключом тела ... Кажется, ничего не работает.

Есть идеи, пожалуйста?

1 Ответ

0 голосов
/ 29 октября 2018

В этом случае я получаю следующее сообщение об ошибке: Не удалось выполнить «извлечение» в «Окне»: запрос с методом GET / HEAD не может иметь тела.

GET-запросы обычно передают данные для запроса с использованием строки запроса (а функция jQuery getJSON будет кодировать данные там).

Первый: снимите корпус:

body: JSON.stringify({command: "get_token"}),

Второе: удалить утверждение о том, что тело содержит JSON

headers: {"Content-Type": "application/json; charset=utf-8"},

В-третьих: кодировать данные в строке запроса:

var url = new URL('php/data.php', location);
url.searchParams.append("command", "get_token");
var url_string = url.toString()
console.log(url_string);
fetch(url_string, {/* etc */})
...