2015-05-08 17 views
11

Próbuję zbudować aplikację mobilną z jonowym frameworkiem. Kiedy moja aplikacja próbuje połączyć się z serwerem, aby uzyskać json (serwer jest dostępny w api sieci web i cors), po prostu zwraca 404 na genymotion i prawdziwe urządzenie. Ale kiedy uruchomię aplikację w przeglądarce z ionic serve wszystko działa dobrze.

Jestem pewien, że CORS działa. Tutaj nagłówek odpowiedzi dostałem podczas pracy aplikacji w przeglądarce.

Response

Access-Control-Allow-Origin:* 
Cache-Control:no-cache 
Content-Length:395 
Content-Type:application/json; charset=utf-8 
Date:Fri, 08 May 2015 20:24:04 GMT 
Expires:-1 
Pragma:no-cache 
Server:Microsoft-IIS/7.0 
X-AspNet-Version:4.0.30319 
X-Powered-By:ASP.NET 

Zapytanie:

Accept:application/json, text/plain, */* 
Accept-Encoding:gzip, deflate, lzma, sdch 
Accept-Language:tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4 
Cache-Control:no-cache 
Connection:keep-alive 
DNT:1 
Host:*******:14400 
Origin:http://192.168.0.28:8100 
Pragma:no-cache 
Referer:http://192.168.0.28:8100/ 

Config.xml ma <access origin="*"/> tej linii w konfiguracji

w moich app.js usunąłem X-Zamówiony-with nagłówki dla wszystkich połączeń HTTP.

W prosty sposób uzyskuję żądania do serwera w moich klasach fabrycznych.

$http.get(serverPath + "/api/mobilerest/mainPage"); 

Po uruchomieniu aplikacji w trybie Genymode lub rzeczywistym urządzeniu odpowiedź wynosi 404, a statusText "nie znaleziono". Jestem pewien, że działa api sieci web, przyczyną tego zachowania są aplikacje oparte na jonach, moja aplikacja to plik lokalny, a protokół to plik: /// więc nagłówek Origin ma wartość null w żądaniu, następnie serwer zwraca 404. Próbowałem też lokalny plik bez serwera otrzymuję taki sam błąd jak w aplikacji.

Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4 
Cache-Control:no-cache 
Connection:keep-alive 
DNT:1 
Host:server:14400 
Origin:null 
Pragma:no-cache 

Czy czegoś brakuje?

Odpowiedz

20

cordova-plugin-whitelist wydaje się obecnie "obowiązkowy".

zainstalować go:

cordova plugin add cordova-plugin-whitelist 

configure config.xml

Można zachować bieżącą konfigurację z * lub zmienić na bardziej restrykcyjnych zasad

dodać politykę HTML na index.html, należy również dodać zasadę. Aby autoryzować wszystko, to jest tutaj:

<meta http-equiv="Content-Security-Policy" content="default-src *; 
style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 
'unsafe-eval'" 
+1

Dziękuję @aorfevre to działało . Ale dlaczego nie mogłem znaleźć tej informacji w dowolnym miejscu :) – adt

+0

Jeszcze raz dziękuję za udostępnienie @aorfevre.Tak jak nie mogłem domyślić się, dlaczego działa on w przeglądarce, a nie na moim urządzeniu. –

+0

To też działa dla mnie. Nie jestem pewien, dlaczego nie jest to dodane do żadnej dokumentacji. Zostało to omówione na niektórych forach. –

-1

można po prostu przejść do konfiguracji pliku .xml i edytować ten wiersz

<access origin="*://*/*" /> 

i można wywołać żadnych danych z Out of intruption CORS w konsoli dziękuję plz zaaplikuj ten kod swoją aplikację jonową

Powiązane problemy