![](/img/trans.png)
[英]Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0 (React/Redux App)
[英]Redux app error: Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0
我有这样的错误:
index.js:8 Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0
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 });
}
}
如何修复此错误?
由于该超链接后面的 JSON 文件是有效的,我怀疑您有网络错误并且正在接收标准的 HTML 错误页面,该页面以<html>
开头。 这就是在我调试过的 99% 的情况下出现SyntaxError: Unexpected token < in JSON at position 0
错误的原因。
因此,如果您实际上收到了具有正确类型的文件作为响应,请在控制台中仔细检查。
编辑:
你有两个问题:
1) API 希望您使用 HTTPS 获取 JSON 文件。 因此,只需在操作中的 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) URL 所需的{day}
参数未正确传递。 因此,您如何传递道具或 state 或 react 和 redux 之间存在问题。 不幸的是,我不能说确切的解决方案是什么,因为我没有一起使用 react+redux。 但是,当我将{day}
替换为您提供的日期字符串之一时export const days = ["23-08-2019", "24-08-2019", "25-08-2019"];
, 然后 API 返回正确的 JSON 文件。
所以修复HTTPS
问题,然后尝试修复{day}
问题。 然后 JSON 应该正确返回。 您仍然会遇到有关过滤的错误,但这与 json 文件的问题无关,可以单独解决。
此错误基本上意味着您尝试对 JSON 解析的内容不是 object。 也许响应被包装在一个数组中,比如
[{
"name": "json"
}]
如果是这样,您将收到该错误。
好的,我将您的代码沙箱文件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 });
};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.