关于javascript:Get json from jsonp fetch promise

Get json from jsonp fetch promise

我只是从 react-native 开始,我正在做文档中的经典示例作为基础......

1
2
3
4
5
6
7
8
fetch('https://facebook.github.io/react-native/movies.json')
  .then((response) => response.json())
  .then((responseJson) => {
    return responseJson.movies;
  })
  .catch((error) => {
    console.error(error);
  });

在该示例中,如果使用正确的 json,这一切都可以正常工作。

但是,在我的特定情况下,唯一可用的 api 响应是 JSONP 而不是 JSON。没有基本的 JSON 可用。所以我收到一个关于"("的错误。

所以不是像JSON那样

1
{"id":"1","movies" : [ {"id" :"123" } ] }

我收到 JSONP 之类的

1
?( {"id":"1","movies" : [ {"id" :"123" } ] });

但是,我不确定我可以做些什么来通过 fetch Promise 将 JSON 从中取出?如何使用我自己的函数之一来操作响应,或者有更自然的方法吗?

所以在第一个 then() 中我不确定我能做些什么来取出 json(我尝试过对响应进行操作,但这似乎只是看Promise,所以我不确定如何反应-native fetch 正在使用此操作)。


我建议使用response.text()而不是response.json(),去除周围的噪音,然后解析JSON字符串。

1
2
3
4
5
6
7
8
9
10
fetch('YOUR URL HERE')
  .then((response) => response.text())
  .then((responseText) => {
    const match = responseText.match(/\\?\\((.*)\\);/);
    if (!match) throw new Error('invalid JSONP response');
    return JSON.parse(match[1]).movies;
  })
  .catch((error) => {
    console.error(error);
  });