Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Redux应用程序错误:未捕获(承诺中)语法错误:意外标记<;在JSON中的位置0_Javascript_Reactjs_Redux - Fatal编程技术网

Javascript Redux应用程序错误:未捕获(承诺中)语法错误:意外标记<;在JSON中的位置0

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

我有这样的错误:

index.js:8未捕获(承诺中)语法错误:意外标记<承诺中 位置0处的JSON

js(操作):


如何修复此错误?

此错误基本上意味着您试图解析的不是对象。也许响应被包装在一个数组中,比如

[{
“名称”:“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()不是这样做的。尝试登录控制台this
const 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 });
  };
}