Родной реагировать выборки() сетевой запрос не удалось



когда я создаю новый проект, используя react-native init (RN версия 0.29.1) и поместите выборку в метод рендеринга в публичный Facebook demo movie API, он бросает Network Request Failed. Существует очень бесполезная трассировка стека, и я не могу отлаживать сетевые запросы в консоли chrome. Вот выборка, которую я посылаю:



fetch('http://facebook.github.io/react-native/movies.json')
.then((response) => response.json())
.then((responseJson) => {
return responseJson.movies;
})
.catch((error) => {
console.error(error);
});
615   10  

10 ответов:

проблема здесь в том, что iOS не разрешает HTTP-запросы по умолчанию, только HTTPS. Если вы хотите включить HTTP-запросы, добавьте это в свой info.plist:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Не рекомендуется разрешать все домены для HTTP. Сделайте исключение только для необходимых доменов.

источник: настройка исключений безопасности транспорта приложений в iOS 9 и OSX 10.11

добавить следующую информацию.файл plist вашего приложения:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

React Native Docs дает ответ на этот вопрос.

Apple заблокировала неявную загрузку ресурсов HTTP с открытым текстом. Поэтому нам нужно добавить следующую информацию о нашем проекте.plist файла (или эквивалент).

<key>NSExceptionDomains</key>
<dict>
    <key>localhost</key>
    <dict>
        <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
        <true/>
    </dict>
</dict>

React Native Docs - > Интеграция С Существующими Приложениями - > Безопасность Транспорта Приложений

проблема может быть в конфигурации сервера.

Android 7.0 имеет ошибку описано здесь. Обходной путь, предложенный Вики Чижвани:

настройка сервера на использование эллиптической кривой prime256v1. Для например, в Nginx 1.10 вы делаете это, устанавливая ssl_ecdh_curve prime256v1;

Я был с помощью localhost для адреса, который был, очевидно, неправильно. После замены его на IP-адрес сервера (в сети эмулятор), он работал отлично.

Edit

в эмуляторе Android адрес машины разработки 10.0.2.2. Больше объяснений здесь

для Android, вы, возможно, пропустили, чтобы добавить разрешение в AndroidManifest.XML Необходимо добавить следующее разрешение.

<uses-permission android:name="android.permission.INTERNET" /> 

У меня аналогичная проблема. В моем случае запросы на localhost работали и внезапно прекратились. Оказалось, что проблема заключалась в том, что я отключил свой wi-fi на своем телефоне android.

просто у вас есть изменения в Fetch....

fetch('http://facebook.github.io/react-native/movies.json')
    .then((response) => response.json())
    .then((responseJson) => {
        /*return responseJson.movies; */
        alert("result:"+JSON.stringify(responseJson))
        this.setState({
            dataSource:this.state.dataSource.cloneWithRows(responseJson)
        })
     }).catch((error) => {
         console.error(error);
     });

у меня была эта проблема для Android-

URL-localhost / authToken.json - не работает : (

URL-10.106.105.103 / authToken.json - не работает : (

URL -http://10.106.105.103/authToken.json - работал :): D

Примечание - Используйте ifconfig на Linux или ipconfig в Windows, чтобы найти IpAddress машины

пример:

return fetch('http://<your ip>')
  .then((response) => response.json())
  .then((responseJson) => {
    console.log(responseJson)
  })
  .catch((error) => {
    console.error(error);
  });

Comments

    Ничего не найдено.