2015-05-08 15 views
15

Ho appena aggiornato la nuova versione su Angular + Ionic e il metodo per l'elaborazione della richiesta remota ha smesso di funzionare e restituisce sempre la risposta 404.Ionic + Angular Stato richiesta di ritorno POST 404

richiesta è la seguente:

Request Method:POST 
Status Code:404 Not Found (from cache) 
Request Headersview source 
Accept:application/json, text/plain, */* 
Content-Type:text/plain 
Origin:file:// 
User-Agent:Mozilla/5.0 (Linux; Android 4.4.2; Lenovo Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 
Request Payloadview source 
{,…} 

Codice del metodo che è in corso l'elaborazione richiesta remota è la seguente:

// set transfer credentials 
       $http({ 
        method : 'POST', 
        url : $scope.remoteUrl, 
        data: {img_base64: "/9j/4AAQSkZ"}, 
        headers: 'application/json', 
        timeout: 10000 
        // success response 
       }).success(function(data, status, headers, config) { 
        //SUCESSS 
        } else { 
        //PROCESSING ERROR      
} 

        // error response 
       }).error(function(data, status, headers, config) { 
        // ERROR 
       }); 

ho cercato di risolverlo con questo argomento:

AngularJs $http.post() does not send data

e

Angular + Ionic Post request getting 404 not found

Ma senza fortuna.

lato server sta elaborando richiesta in questo modo:

$inputJSON = file_get_contents('php://input'); 
    $input= json_decode($inputJSON, TRUE); //convert JSON into array 

se sto cercando di inviare richiesta utilizzando postino o arricciare ogni cosa sembra funzionare.

informazioni ionico:

Node Version: v0.12.2 
Cordova CLI: 5.0.0 
Ionic CLI Version: 1.3.22 
Xcode version: Xcode 6.3.1 Build version 6D1002 
ios-sim version: Not installed 
ios-deploy version: Not installed 

AngularJS versione:

"version": "1.3.13", 

come posso risolverlo per favore?

Molte grazie per qualsiasi consiglio

risposta

40

Hum, ho appena incontrato lo stesso problema: l'intestazione suggerisce che è stato recuperato from cache ... Ma in realtà, sembra che abbia a che fare con una nuova politica di sicurezza nelle nuove versioni di Cordova.

Ecco come ho risolto:

ho installato Cordova's whitelist plugin:

cordova plugin add cordova-plugin-whitelist 

Quindi, aggiungere la vostra politica contenuti nella vostra index.html come un meta tag (utilizzando il proprio host o '*' per accettando tutte le richieste):

<meta http-equiv="Content-Security-Policy" content="default-src 'self' yourhost.com ws://localhost:35729 data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *;script-src 'self' localhost:35729 'unsafe-eval' 'unsafe-inline';"> 

default-src viene utilizzato per le richieste generali; l'host ws://localhost:35729 viene utilizzato per il live-reload in ionic serve.

script-src viene utilizzato per l'esecuzione di script sicura

unsafe-inline e unsafe-eval sono necessari per angolare per funzionare correttamente.

data: gap: https://ssl.gstatic.com viene utilizzato solo su iOS.

self indica l'host corrente del file index.html.

È necessario aggiungere il proprio ordine affinché le richieste funzionino. Non dimenticare di aggiungere il protocollo e la porta se non sono standard

Puoi saltare il metatag se non lo desideri, ma riceverai molti avvisi dal plug-in della lista bianca.

Ulteriori informazioni su come configurare questo in the plugin's readme.

Quindi ricostruire l'app e dovrebbe funzionare di nuovo.

+0

Grazie, era una soluzione corretta. – redrom

+0

Hai trovato questo fuori strada costruendo con una versione più recente di Phonegap Build. Stavo tirando fuori i miei capelli chiedendo perché l'app funzionava bene su altri dispositivi ma non su questo particolare dispositivo Android ... grazie. – ScottN

+0

Same probleme ma questo non funziona, reinstallando cordova-plugin-whitelist ha risolto il probleme si può anche guardare https://forum.ionicframework.com/t/ionic-angular-http-post-results-in-a-404- ma solo-on-an-android-phone-not-in-an-iphone-o-in-the-Browser/28999/14 – HugoPoi

-2

Il (from cache) in stato di risposta suggerisce che il browser nella cache cattiva risposta e sta giocando di nuovo a voi. Prova a svuotare la cache o utilizzare le tecniche di busting della cache.

+0

Grazie, ma è strano perché è la nuova installazione sul dispositivo. Quale mi consigli di usare per me? Dovrei aggiungere alcune intestazioni sul lato server? – redrom

1

Ho sofferto per un po 'di tempo con questo, ma il trucco era installare il plugin, configurare il CSP in index.html e quindi rimuovere il plugin e aggiungerlo nuovamente.

4

Ho anche avuto questo problema e cercato un sacco poi finalmente ... ho rimosso il plugin whitelist:

cordova plugin remove cordova-plugin-whitelist 

poi renstalled è

cordova plugin add cordova-plugin-whitelist 

Mi ha aiutato e spero che risolvere il problema

Problemi correlati