2016-12-14 103 views
1

我剛開始與反應本地的,和我做的文檔爲基礎的經典例子...獲取JSON從JSONP獲取承諾

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

不過,我不確定我能做些什麼來獲得JSON如何通過獲取promise來操作響應?我如何使用自己的函數來操作響應,還是有更自然的方式?

所以在第一個then()我不確定我能做什麼得到o JSON(我嘗試過對響應進行操作,但似乎只是看着承諾,所以我不確定react-native獲取是如何操作的)。

+0

感謝downvote,將是有益的說爲什麼,這樣我就可以改善。 – Ian

回答

3

我會建議使用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); 
 
     });

+0

謝謝,非常有用。 – Ian