Fetch API - 使用response.json()会引发意外的输入错误

时间:2016-05-13 11:13:16

标签: json fetch

使用Fetch API从本地服务器上的REST API获取某些JSON并尝试使用response.json()解析响应时,我收到unexpected end of input错误。

使用以下一行代码在本地服务器上可以轻松重现错误:

fetch(new Request('http://localhost:9950/RestService/v2/search/find/1', {mode: 'no-cors'})).then(function(response) { response.json(); });

// Output from Chrome console:
// Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
// VM424:1 Uncaught (in promise) SyntaxError: Unexpected end of input
//     at SyntaxError (native)
//     at <anonymous>:1:128

如果我查看网络选项卡,我可以看到我的请求已由服务器完成,如果我预览响应,我可以看到那里有可用的有效JSON(我通过复制和粘贴JSON对此进行了双重检查从网络响应选项卡到jsonlint.com)。以下是我从服务器获取的响应示例:

{
    "SearchMatches": [{
        "Extracts": ["<b>1<\/b>.txt...", "<b>1<\/b>"],
        "Title": "1.txt",
        "Url": "C:\\TestShare4\\500Docs\\1.txt"
    }]
}

如果我尝试使用response.text()代替response.json(),我会收到一个空字符串。

有关我可能出错的地方的任何想法吗?

请注意,我要求不依赖于浏览器本机支持的任何其他框架或库。

1 个答案:

答案 0 :(得分:0)

我遇到同样的问题,试图从Instagram API中获取一些内容并使用jsonp库解决它。这是我使用的那个:https://github.com/camsong/fetch-jsonp

我的要求:

import fetchJsonp from 'fetch-jsonp';     
return fetchJsonp(`https://api.instagram.com/oembed?url=${url}`, {
      method: 'GET',
      mode: 'no-cors',
      credentials: 'include',
    })
      .then(response => response.json())
      .then(response => {});

希望有所帮助:)