我想将API调用(外部资源,没有机会在API方面进行任何更改)从PHP更改为Javascript(学习目的)。
由于是跨域的,所以我使用了fetch()。运行脚本时,出现意外的输入错误结束,无法弄清原因。
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开发人员手册中的说明实现了搜索参数(searchID和isTagged)。
谢谢!
答案 0 :(得分:4)
您说过mode: 'no-cors',
会禁用所有需要CORS权限的东西。
由于跨源读取数据需要CORS许可,因此没有数据。
尝试将空字符串解析为JSON会导致输入意外结束,因为输入在存在任何JSON之前就结束了。
(请注意,您需要做的其他需要CORS权限的事情,包括将content-type设置为JSON并包括凭据)。