2016-07-06 26 views
5

Im próbuje wysłać wiadomość na adres URL z jońskich użyciu kanciasty, ale mam odpowiedź:Ionic HTTP POST do zewnętrznego URL

odpowiedź do prefligtu żądanie nie przechodzi Check Control dostęp: NIE „Dostęp -Control-Allow-Origin 'nagłówek jest obecny na żądanym zasobu. Pochodzenie "http://localhost:8100" jest zatem niedozwolone. Odpowiedź miała kod stanu HTTP 404.

wiem, że usługa zewnętrzna działa, bo testowałem to przez ajax i wszystko działa doskonale ...

Poniżej kodu stosowanego w angularjs (jonowy) oraz ajax:

Ionic:

var loginServiceUrl = 'http://url.com.br'; //It is not the real one 
var loginServiceData = { 
    email: [email protected] 
    senha: 1234 
}; 
$http.post(loginServiceUrl, loginServiceData). 
then(function (res){ 
    console.log(res); 
}); 

ajax:

$.ajax({ 
    type: "POST", 
    url : 'http://url.com.br', //It is not the real one 
    data : {email: '[email protected]', senha: '1234'}, 
    success: function(result) { 
     $('html').text(JSON.stringify(result)); 
    } 
}); 

Czy ktoś wie, dlaczego dostaję post przez ajax na moim localhost, a nie z ionic, również localhost?

+0

znaleźliście odpowiedź? – ariestikto

+0

Tak. Rozszerzenie chrome: "Allow-Control-Allow-Origin: *", https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi – Beto

+0

Fajnie, wielkie dzięki! – ariestikto

Odpowiedz

1

Sprawdź to. Wyjaśniono sposób radzenia sobie z takimi problemami jak: Twój ->http://blog.ionic.io/handling-cors-issues-in-ionic/

+0

Próbowałem tego, ale moja mała znajomość AngularJs sprawiła, że ​​nie mogłem zrobić tego, co chciałem, używając fabryki ... =/I używając tylko proxy int ionic.project dosent work – Beto

1

Spróbuj dodać nagłówki do swojego żądania POST.

// przykładem DataToSend

var DataToSend = { 
        userID: deviceID, 
        coordLat : pos.coords.latitude, 
        coordLon: pos.coords.longitude 
    }; 

    $http({ 
      method: 'POST', 
      url: 'http://url.com.br', 
      headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, 
      data: DataToSend 
     }) 
+0

Ten sam błąd ... = T – Beto

0

CORS nie ma nic wspólnego ze swoim frontend.

Przed wysłaniem żądania POST, przeglądarka wysyła żądanie OPTIONS do serwera, aby sprawdzić, czy połączenie z Twojej domeny jest dozwolone, czy nie.

Ponieważ otrzymujesz status 404, co oznacza, że ​​serwer nie operująca OPCJE zażądać

1. Pozostawić żądania opcje (takie same jak POST)

teraz do drugiej części, czyli " Odpowiedź na żądanie kontroli wstępnej nie przechodzi kontroli dostępu: Nie "Kontrola dostępu-Pozwól-Origin" "

Po zatwierdzeniu żądania OPCJE ustaw teraz nagłówek odpowiedzi żądania OPCJE (przeglądarka sprawdzi odpowiedź żądania OPCJE a następnie przetwarzać żądanie POST tylko wtedy, gdy istnieje s 'Access-Control-Allow-Origin' obecne w odpowiedzi OPCJE.

2. Zestaw nagłówki reakcji WARIANTÓW żądania

response().setHeader("Access-Control-Allow-Origin", "*"); 
response().setHeader("Allow", "*"); 
response().setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS"); 
response().setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Referer, User-Agent"); 

Przykład .. (w Javie)

Router:

OPTIONS /*all       
controllers.Application.preflight(all) 

Kontroler Funkcja:

public static Result preflight(String all) { 
     response().setHeader("Access-Control-Allow-Origin", "*"); 
     response().setHeader("Allow", "*"); 
     response().setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS"); 
     response().setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Referer, User-Agent, Auth-Token"); 
     return ok(); 
    } 

nadzieję, że to rozwiąże problem.

Cheers