Ошибка приложения Redux: Uncaught (в обещании) SyntaxError: Неожиданный токен <в JSON в позиции 0 - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть такая ошибка:

index.js: 8 Uncaught (в обещании) SyntaxError: Неожиданный токен <в JSON в позиции 0 </p>

index.js (действие):

import { days } from "../components/app";
export function fetchData (day) {
    return async (dispatch) => {dispatch({ type: 'LOAD_DATA_START', day });
    const response = await fetch(`....`); 
    const data = (await response.json()).body; 
    dispatch({ type: 'LOAD_DATA_END', data });
    dispatch({ type: 'SET_SHIFT', data }); 
    } 
}

Как исправить эту ошибку?

Ответы [ 3 ]

3 голосов
/ 08 ноября 2019

Поскольку файл JSON за этой гиперссылкой действителен, я подозреваю, что у вас есть сетевая ошибка, и вместо этого вы получаете стандартную страницу ошибки HTML, которая начинается с <html>. Это стало причиной получения ошибки SyntaxError: Unexpected token < in JSON at position 0 в 99% отлаженных мной случаев.

Так что дважды проверьте в консоли, действительно ли вы получаете этот файл с правильным типом в качестве ответа.

РЕДАКТИРОВАТЬ:

У вас есть две проблемы:

1) API ожидает, что вы получите файл JSON с использованием HTTPS. Поэтому просто добавьте, что перед вашим URL в действиях:

import { days } from "../components/app";
export function fetchData(day) {
  return async dispatch => {
    dispatch({ type: "LOAD_DATA_START", day });
    const response = await fetch(`https://api.iev.aero/api/flights/${day}`);
    const data = (await response.json()).body;
    dispatch({ type: "LOAD_DATA_END", data });
    dispatch({ type: "SET_SHIFT", data });
  };
}

2) Ваш параметр {day}, необходимый вам для URL, не передается правильно. Так что есть проблема с тем, как вы передаете реквизит или состояние или что-то между реакцией и редукцией. К сожалению, я не могу сказать, каково точное решение для этого, так как я не использую response + redux вместе. Но когда я заменяю {day} одной из предоставленных вами строк дня export const days = ["23-08-2019", "24-08-2019", "25-08-2019"];, API возвращает правильный файл JSON.

Так что исправьте проблему HTTPS, а затем попробуйте исправить проблему {day},Тогда JSON должен вернуться правильно. У вас все еще будут ошибки, связанные с фильтрацией, но это не имеет ничего общего с проблемой файла json и может быть решено отдельно.

1 голос
/ 08 ноября 2019

Хорошо, я отредактировал ваш файл песочницы кода Actions > index.js в это:

import { days } from "../components/app";
export function fetchData(day) {
  return async dispatch => {
    dispatch({ type: "LOAD_DATA_START", day });
    const response = await fetch(`api.iev.aero/api/flights/${day}`);
    const data = (await response.text()).body;
    dispatch({ type: "LOAD_DATA_END", data });
    dispatch({ type: "SET_SHIFT", data });
  };
}

0 голосов
/ 08 ноября 2019

Эта ошибка в основном означает, что то, что вы пытаетесь анализировать JSON, не является объектом. Возможно, ответ обернут в массив, например

[{
   "name": "json"
}]

Если это так, вы получите эту ошибку.

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