Javascript Redux应用程序错误:未捕获(承诺中)语法错误:意外标记<;在JSON中的位置0
我有这样的错误: index.js:8未捕获(承诺中)语法错误:意外标记<承诺中 位置0处的JSON js(操作):Javascript Redux应用程序错误:未捕获(承诺中)语法错误:意外标记<;在JSON中的位置0,javascript,reactjs,redux,Javascript,Reactjs,Redux,我有这样的错误: index.js:8未捕获(承诺中)语法错误:意外标记{ 调度({类型:“加载数据开始”,日期}); const response=wait fetch(`api.iev.aero/api/flights/${day}`); const data=(wait response.text()).body; 分派({type:“LOAD_DATA_END”,DATA}); 分派({type:“SET_SHIFT”,data}); }; } 您能告诉我您到底想要什么吗?您收到的JSO
如何修复此错误?此错误基本上意味着您试图解析的不是对象。也许响应被包装在一个数组中,比如
[{
“名称”:“json”
}]
如果是这样,您将得到该错误。由于该超链接后面的JSON文件是有效的,我怀疑您有网络错误,并收到一个标准的HTML错误页面,该页面以
开头。这就是在我调试过的99%的情况下,JSON中位置0处出现SyntaxError:Unexpected token<错误的原因
因此,如果您实际收到的响应文件类型正确,请在控制台中仔细检查
编辑:
你有两个问题:
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}
参数未正确传递。因此,在react和redux之间如何传递道具、状态或其他信息是一个问题。不幸的是,我不能说确切的解决方案是什么,因为我没有同时使用react+redux。但是,当我用您提供的日期字符串之一替换{day}
时,导出const days=[“23-08-2019”、“24-08-2019”、“25-08-2019”]代码>,然后API返回正确的JSON文件
因此,请修复HTTPS
问题,然后尝试修复{day}
问题。然后JSON应该正确返回。您仍然会有关于筛选的错误,但这与json文件的问题无关,可以单独解决。好的,我将您的代码沙盒文件Actions>index.js编辑为:
从“./components/app”导入{days};
导出函数获取数据(天){
返回异步调度=>{
调度({类型:“加载数据开始”,日期});
const response=wait fetch(`api.iev.aero/api/flights/${day}`);
const data=(wait response.text()).body;
分派({type:“LOAD_DATA_END”,DATA});
分派({type:“SET_SHIFT”,data});
};
}
您能告诉我您到底想要什么吗?您收到的JSON格式似乎不正确。你能提供一些例子吗?@Vahid Akhtar我想知道如何修复这个错误你能看到我的沙箱中哪里有bug吗?如何修复它?您也可以通过单击沙箱中的console选项卡来查看错误。您拥有一个解析为undefined
的文件,并返回一个HTML测试页面,而不是您正在查找的JSON。试图在代码中找到位置。你能至少帮我一点忙吗?我只是一个redux新手,已经为我的应用程序苦苦挣扎了整整一周……这就是应用程序在纯现实中的工作方式:1)你需要在url前面添加HTTPS://
:等待获取(
{day})代码>,因为如果我试图查询该API,我会得到一个错误,它必须通过https。2) 您的日期未定义,因此API返回该HTML模板是由于沙盒而不是错误。我已更新了我的答案。添加https
,并尝试查找您的day
未正确发送到fetchData()
的原因。尝试console.log(response.text()).body()
或仅console.log(response.body()
以验证请求返回的确切内容和格式。您能看到我的沙盒中可能存在错误吗?如何修复它?当然,只要一个门派(非常感谢!)但是现在我有了一个新的错误:你能提出一些建议吗?这意味着response.text()不是这样做的。尝试登录控制台thisconst data=(等待响应)
然后console.log(data)
我有一个新问题:使用.text()
将只提供原始文本而不进行解析。所以我想补充一点,您现在必须显式地使用constparsed=JSON.parse(data)
或将其嵌套在const data=
中,否则您将无法访问数据,.body
将抛出新错误。API的问题在于URL,而不是它的解析方式,因为一个有效的URL:https://api.iev.aero/api/flights/2019-11-08
将返回正确的JSON文件,因此您可以使用.JSON()
。
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 });
};
}