Запрос API json преобразование в JS объект - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь создать простой AJAX запрос к AccuWeather, но метод JSON не преобразует возвращаемые данные в JS объект.

Все, что я получаю, это:

Код_состояния: "JSON_VALIDATION",
status_msg: "Синтаксическая ошибка. Неверный ввод JSON. Пожалуйста, проверьте поля с помощью JSON ввода." *

Что я не так?

async function getWeather() {
  try {
    const request = await fetch(
      'https://accuweatherstefan-skliarovv1.p.rapidapi.com/searchByLocationKey', {
        'method': 'post',
        'headers': {
          'x-rapidapi-host': 'AccuWeatherstefan-skliarovV1.p.rapidapi.com',
          'x-rapidapi-key': '...',
          'content-type': 'application/x-www-form-urlencoded'
        },
        'body': {
          'locationkey': 'IL',
          'apiKey': 'xxxxx'
        }
      }
    );
    const data = await request.json();
    return data;
  } catch (error) {
    alert(error);
  }
}
getWeather();
getWeather('IL').then(resolved => {
  console.log(resolved);
});

1 Ответ

0 голосов
/ 08 февраля 2020

Проблема не в преобразовании ответа json, а в отправке запроса. Вы не можете отправить объект в теле, вы должны отправить строку JSON или, в вашем случае, создать объект formdata:

const formData = new FormData();
formData.append('locationkey', 'IL');
formData.append('apiKey', 'apiKey');

и передать его как тело:

const request = await fetch(
    'https://accuweatherstefan-skliarovv1.p.rapidapi.com/searchByLocationKey',
    {
        'method': 'post',
        'headers': {
            'x-rapidapi-host': 'AccuWeatherstefan-skliarovV1.p.rapidapi.com',
            'x-rapidapi-key': '...',
            'content-type': 'application/x-www-form-urlencoded'
        },
        'body': formData
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...