Родной реагировать выборки() сетевой запрос не удалось
когда я создаю новый проект, используя 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);
});
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