2016-12-14 1 views
1

をフェッチ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を取得し、すべての中で、適切なJSONで正常に動作しますその例。

しかし、私の場合、使用できるAPI応答はJSONPであり、JSONではありません。基本的なJSONはありません。だから私は、「(」に関するエラーを受け取る。だからではなく

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

のようなJSONの

私は私が得るために何ができるかわからないよ、しかし

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

のようなJSONPを受け取ります

私は自分が何をすることができるのかよく分かりませんが、私は自分自身の機能を使ってレスポンスを操作することができますか? Oを得る(私は応答で動作しようとしましたが、それは約束を見ているようですので、どのように反応ネイティブのフェッチがこれで動作しているのかは分かりません)。

+0

おかげで、なぜ言うことは有用であろうので、私はそれを改善することができます。 – Ian

答えて

3

私はresponse.json()の代わりにresponse.text()を使用し、周囲のノイズを除去してから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); 
 
     });
downvoteのため

+0

ありがとう、非常に便利です。 – Ian

関連する問題