通过fetch()调用API-输入意外结束

时间:2019-08-30 12:50:31

标签: javascript jquery json api

我想将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)。

谢谢!

1 个答案:

答案 0 :(得分:4)

您说过mode: 'no-cors',会禁用所有需要CORS权限的东西。

由于跨源读取数据需要CORS许可,因此没有数据。

尝试将空字符串解析为JSON会导致输入意外结束,因为输入在存在任何JSON之前就结束了。

(请注意,您需要做的其他需要CORS权限的事情,包括将content-type设置为JSON并包括凭据)。