javascript - 通过 fetch() 调用 API - 输入意外结束
问题描述
我想将 API 调用(外部源,没有机会在 API 端更改某些内容)从 PHP 更改为 Javascript(学习目的)。
由于跨域,我使用 fetch()。当我运行我的脚本时,我得到一个 Unexpected end of input 错误并且不知道为什么。
function postData(url = '', data = {}) {
var headers = new Headers();
headers.set('Authorization', 'Basic ' + window.btoa("user" + ':' + "pass"));
return fetch(url, {
method: 'POST',
mode: 'no-cors',
cache: 'no-cache',
credentials: 'include',
headers: {
'Content-Type': 'application/json'
},
redirect: 'follow',
referrer: 'no-referrer',
body: JSON.stringify(data),
}).then(response => response.json()).catch(error => console.error(error));
}
postData('https://www.api-endpoint.com/cat1/api/search?', {
"searchID": "710",
"isTagged": true
}).then(data => console.log(JSON.stringify(data))).catch(error => console.error(error));
如何识别此代码的问题?看来授权没问题。我按照 API Dev 的手册中的描述实现了搜索参数(searchID 和 isTagged)。
提前致谢!
解决方案
您说mode: 'no-cors',
这会禁用需要 CORS 许可的所有内容。
由于跨源读取数据需要 CORS 权限,因此没有数据。
尝试将空字符串解析为 JSON 会导致输入意外结束,因为输入在任何 JSON 出现之前就结束了。
(请注意,需要 CORS 权限并且您正在尝试执行的其他操作包括将内容类型设置为 JSON 并包括凭据)。
推荐阅读
- javascript - (原版)JS:复选框“选中”返回意外结果
- apache-spark - Cassandra 连接器 -- joinWithCassandraTable 和 leftJoinWithCassandraTable 之间的区别 -- 无法解析符号
- c# - C#中基于距离的资源调度
- javascript - 启动定时器时不显示时间
- python - 总解(递归函数)
- android - 无法通过 @POST 请求使用 Retrofit 解析 JSON 响应和参数
- android - 如何在这些列表图块之间放置分隔线
- python - 如何让色彩图填充区域?
- android - 无法将标准库导入本机 android 项目中的头文件
- jquery - 为什么 :visible 和 hide/show 不起作用?jQuery