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); }); |
- 请记住,当 CORS 标头不可用时,通常会使用 JSONP。在这种情况下,如果没有 CORS 标头,fetch 将无法工作。
- 数组的 JSON.parse 似乎仍然存在问题。例如 “[“my”,”name”,”is”]”
来源:https://www.codenong.com/41146650/