2016-07-06 74 views
5

Im cercando di inviare un messaggio a un URL con ionico usando angolare, ma ho la risposta:ionico http post per URL esterno

risposta alla richiesta di verifica preliminare non passa di controllo di controllo di accesso: accesso No' L'intestazione -Control-Allow-Origin 'è presente sulla risorsa richiesta. L'origine 'http://localhost:8100' non è quindi consentita l'accesso. La risposta ha avuto codice di stato HTTP 404.

so che il servizio esterno sta funzionando, perché ho provato da ajax e tutto funziona alla perfezione ...

Di seguito il codice utilizzato in AngularJS (ionico) e Ajax:

ionico:

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)); 
    } 
}); 

Qualcuno sa perché ottengo il post tramite ajax sul mio localhost e non con ionic, anche localhost?

+0

Hai trovato la risposta? – ariestikto

+0

Sì. Un'estensione di Chrome: "Allow-Control-Allow-Origin: *", https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi – Beto

+0

Cool, grazie mille! – ariestikto

risposta

1

Provare ad aggiungere intestazioni nella richiesta POST.

// esempio di 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

Same error ... = T – Beto

0

CORS non ha nulla a che fare con il vostro frontend.

Prima di inviare la richiesta POST, il browser invia una richiesta OPTIONS al server per verificare se la chiamata dal proprio dominio è consentita o meno.

Dal momento che, si stanno ottenendo Stato 404, questo significa che il server non gestisce le OPZIONI richiesta

1. Lasciare la richiesta OPTIONS (lo stesso di POST)

ora alla seconda parte vale a dire " La risposta alla richiesta di verifica preliminare non supera il controllo del controllo accessi: No 'Access-Control-Allow-Origin' "

Dopo aver consentito la richiesta OPZIONI, ora impostare l'intestazione di risposta della richiesta OPZIONI (Browser verificherà la risposta della richiesta OPZIONI e quindi elaborare la richiesta POST solo se ci s 'Access-Control-Allow-Origin' presente nella risposta OPTIONS.

2. Impostare le intestazioni di risposta di opzioni richiesta

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"); 

Esempio .. (in Java)

Router:

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

funzione di regolatore:

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(); 
    } 

Spero che questo risolverà il vostro problema.

Acclamazioni