首页 > 解决方案 > 通过 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)。

提前致谢!

标签: javascriptjqueryjsonapi

解决方案


您说mode: 'no-cors',这会禁用需要 CORS 许可的所有内容。

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

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

(请注意,需要 CORS 权限并且您正在尝试执行的其他操作包括将内容类型设置为 JSON 并包括凭据)。


推荐阅读