【问题标题】:Get json from jsonp fetch promise从 jsonp fetch promise 中获取 json
【发布时间】:2017-04-30 00:32:03
【问题描述】:

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

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 那样

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

我收到 JSONP 之类的

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

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

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

【问题讨论】:

    标签: javascript json react-native promise jsonp


    【解决方案1】:

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

    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);
      });
    

    【讨论】:

    • 请记住,当 CORS 标头不可用时,通常会使用 JSONP。在这种情况下,如果没有 CORS 标头,fetch 将无法工作。
    • 数组的 JSON.parse 似乎仍然存在问题。例如"["my", "name", "is"]"
    猜你喜欢
    • 2016-11-17
    • 2016-12-18
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 2019-07-09
    相关资源
    最近更新 更多