2016-07-14 8 views
0

現在、モバイルネイティブプロジェクトを開発するためにReact-Nativeを使用しています。私たちのアプリはAPIに依存しています。そこで、Reactのfetchメソッドを使用してAPIからデータを取得します。私たちの問題は、fetchメソッドがAPIに基づいて異なった働きをすることです。 APIを使用すると、fetchメソッドがのネットワークリクエストに失敗しましたエラー。テストするために別の公開APIを試しましたが、エラーは発生しません。リアクションネイティブフェッチAPIはAPIに基づいて異なる動作をします

すべてのAPIをブラウザとPostman(テストAPI)でテストしましたが、すべてがJSON応答を正しく示しています。しかし、fetchメソッドでテストしますが、動作は異なります。状況を理解するためのコードスニペットは次のとおりです。

import React, { Component } from 'react'; 
import { 
    AppRegistry, 
    StyleSheet, 
    Text, 
    View, 
    AlertIOS 
} from 'react-native'; 

class Test extends Component { 
    constructor() { 
    super(); 

    state = { 
     airports: [] 
    } 
    } 

    onAfterLoad = (data) => { 
    AlertIOS.alert(
     "Fetched Successfully" 
    ); 
    this.setState({ 
     airports: data.airports 
    }); 
    } 

    componentWillMount() { 
    // Fails 
    let api1 = 'http://kolaybilet.webridge.co/api/v1/airports/ist/'; 
    // Fails 
    let api2 = 'http://jsonplaceholder.typicode.com/posts/1/'; 
    // Works 
    let api3 = 'https://randomuser.me/api/'; 

    fetch(api1) 
     .then((r) => { 
     return r.json(); 
     }) 
     .then(this.onAfterLoad) 
     .catch((e) => { 
     AlertIOS.alert("An Error Has Occurred!", e.message); 
     }); 
    } 

    render() { 
    return (
     <View style={styles.container}> 
     <Text style={styles.welcome}> 
      Welcome to React Native! 
     </Text> 
     </View> 
    ); 
    } 
} 
+0

私はあなたが 'CORS'に問題があると仮定しますが、' fetch'がどのように機能するのかよくわかりません(私のプロジェクトでは、webとreact-nativeアプリケーションの両方に 'superagent'ライブラリを使います) 'https:// developer.mozilla.org/ja-US/docs/Web/API/Fetch_API/Using_Fetch' –

答えて

3

問題は、iOSのApp Transport Securityポリシーを中心としています。 randomuser APIはSSLですが、他のAPIはSSLではありません。

XCodeプロジェクトのinfo.plistファイルで辞書の下にNSAllowsArbitraryLoadsというキーを追加し、値はYESです。これにより、他のエンドポイントを正常にフェッチできます。

+0

Brice、あなたのソリューションに感謝します。あなたの答えを編集するように勧めました。正しいですが、info.plistパラメータはhttp://stackoverflow.com/a/31807139/1175235に基づいて更新する必要があります。その答えによると、fetchメソッドは完全に機能します。どうもありがとう。 –

関連する問題