2015-05-08 16 views
15

Ich habe gerade aktualisiert auf der neuen Version auf der Angular + Ionic und Methode zur Verarbeitung von Remote-Anfrage funktioniert nicht mehr und gibt immer 404-Antwort.Ionic + Angular POST Anfrage zurück Status 404

Antrag folgt:

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 
{,…} 

-Code des Verfahrens, die Remote-Anforderung verarbeitet folgt:

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

Ich habe versucht, es zu lösen dieses Thema mit:

AngularJs $http.post() does not send data

und

Angular + Ionic Post request getting 404 not found

Aber ohne Glück.

Server-Seite verarbeitet Anfrage auf diese Weise:

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

Wenn ich versuche Anfrage mit Postman zu senden oder kräuseln alles scheint zu funktionieren.

Ionic Info:

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 Version:

"version": "1.3.13", 

Wie kann ich lösen Sie es bitte?

Vielen Dank für jede Beratung

Antwort

40

Hum, ich lief gerade in das gleiche Problem: der Header schlägt vor, es wurde from cache geholt ... Aber tatsächlich scheint es, dass es mit einer neuen Sicherheitspolitik in neuen Versionen von Cordova zu tun hat.

Hier ist, wie ich es gelöst:

I Cordova's whitelist plugin installiert:

cordova plugin add cordova-plugin-whitelist 

Dann in Ihrem index.html als Meta-Tag (mit Ihrem eigenen Host oder '*' Ihre Inhalte Richtlinie hinzufügen für Annahme aller Anfragen):

<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 wird für allgemeine Anfragen verwendet; Der Host ws://localhost:35729 wird für das Live-Reload in ionic serve verwendet.

script-src wird für sichere Skriptausführung verwendet

unsafe-inline und unsafe-eval erforderlich sind, um für Winkel richtig zu arbeiten.

data: gap: https://ssl.gstatic.com wird nur unter iOS verwendet.

self bedeutet der aktuelle Host der Datei index.html.

Sie müssen Ihre eigenen hinzufügen, damit Ihre Anforderungen funktionieren. Vergiss nicht, das Protokoll und den Port hinzuzufügen, wenn sie nicht Standard sind.

Du kannst das Meta-Tag überspringen, wenn du es nicht willst, aber du wirst eine Menge Warnungen vom Whitelist-Plugin bekommen.

Weitere Informationen zur Konfiguration in the plugin's readme.

Dann erstellen Sie Ihre App neu, und es sollte wieder funktionieren.

+0

Danke, es war eine korrekte Lösung. – redrom

+0

Fanden Sie dies auf die harte Tour, indem Sie eine neuere Version von Phonegap Build erstellen. Ich zog mir die Haare aus und fragte mich, warum die App auf anderen Geräten funktionierte, aber nicht auf diesem einen bestimmten Android-Gerät ... Danke. – ScottN

+0

Gleiches Problem, aber das funktioniert nicht, Neuinstallation Cordova-Plugin-Whitelist hat das Problem gelöst, das Sie auch https://forum.ionicframework.com/t/ionic-angular-http-post-results-in-a-404- Nur-auf-einem-Android-Handy-nicht-auf-einem-iPhone-oder-in-dem-Browser/28999/14 – HugoPoi

-2

Die (from cache) in Antwortstatus lässt vermuten, dass Ihr Browser schlechte Antwort zwischengespeichert und es zurück zu Ihnen spielt. Versuchen Sie, den Cache zu leeren oder verwenden Sie Cache-Busting-Techniken.

+0

Danke, aber das ist seltsam, weil es die Neuinstallation auf dem Gerät ist. Was empfehlen Sie für mich? Sollte ich einige Header auf der Serverseite hinzufügen? – redrom

1

Ich kämpfte seit einiger Zeit mit diesem, aber der Trick war, das Plugin zu installieren, konfigurieren Sie den CSP in index.html und entfernen Sie dann das Plugin und fügen Sie es erneut.

4

Ich hatte auch dieses Problem und suchte schließlich eine Menge dann ... ich die Whitelist-Plugin entfernt:

cordova plugin remove cordova-plugin-whitelist 

renstalled es dann

cordova plugin add cordova-plugin-whitelist 

Es hat mir geholfen, und hoffen, dass es lösen Ihre Problem