Ich baue eine Cordova APP mit einfachen REST-Anrufen.
Das Problem ist, wenn ich einen AJAX mit POST erstelle, sendet mir Chrome: "XMLHttpRequest kann Ссылка nicht laden für preflight hat ungültigen HTTP-Statuscode 405 " auf der Konsole.
Aber wenn ich einen AJAX-Aufruf mit GET mache (im Grunde einen Wert aus der Datenbank), funktionieren die Dinge wie ein Zauber.
Mein AJAX-Anruf lautet:
%Vor%POST-Handler in REST
%Vor%Was ich versucht habe:
1 # : Zugriff auf den Ursprung in der Datei config.xml
%Vor%2 # : Fügen Sie die connect-src MY IP zum Meta-Tag hinzu
%Vor%3 # : Fügen Sie Access-Control-Allow-Origin in meiner REST-App .htaccess hinzu
%Vor%4 # : Fügen Sie Support-Cors in JavaScript hinzu
%Vor%5 # : Um zu überprüfen, ob der Server-POST fehlerhaft ist, habe ich CURL verwendet und funktioniert normal (Erfolg)
%Vor%OBS: Ich verwende Slim-Framework für REST ( Ссылка )
=================
Update # 1:
Ich habe meine Datenbank und Anwendung auf einen Online-Host hochgeladen und die Ergebnisse sind immer noch gleich.
=================
Update # 2:
Bei weiteren Tests bemerkte ich, dass das Entfernen des contentType: "application / json" Debuggers einen anderen Fehler anzeigt.
%Vor%=================
Seit zwei Tagen versuche ich, dies zu lösen, und nichts erscheint als Lösung. Ich bin wirklich traurig.
Nach dem Lesen von ungefähr 60 Fragen in StackOverflow und Sachen über CORS, PHP und Zugangskontrolle erreiche ich eine "einfache Lösung".
Aber bevor ich die Lösung poste, möchte ich sagen, dass diese Art von Problem zu "allgemein" ist und der Fehler irgendwo sein kann.
Ok, zuerst funktioniert die Lösung nicht in Chrome. Chrome gibt immer den 405-Statuscode zurück, aber wenn die cordova-App in realen Geräten (oder Simulatoren) ausgeführt wird, wirkt die Lösung wie ein Zauber. Ja, hier geht es um Chrome, die domainübergreifende Anfragen blockiert.
Die Daten in AJAX müssen mit '{}' platziert werden. Ja, das wusste ich nicht. Wenn Sie möchten, spielen Sie einfach JSON.stringify, um es viel einfacher zu machen.
%Vor%In der REST-API müssen Sie die Zugriffskontrolle-Zulassen-Header aktivieren, damit die Dinge funktionieren.
%Vor%Im Moment arbeitet meine APP normal mit diesen Lösungen. Ich freue mich über andere Lösungen (auch für die Arbeit in Chrome).
Danke Jungs!
Ich denke, das Problem könnte das sein:
Der Preflight-Fehler ist darauf zurückzuführen, dass der Client eine OPTIONS-Anfrage (vor dem Post) macht; Diese Anforderung wird vom Server nicht korrekt verarbeitet. Da die OPTIONS-Anfrage nicht vom Server bearbeitet wird, wird der nächste POST nicht verarbeitet. Überprüfen Sie zuerst mit dem Debugger (oder Sniffing auf dem Server), welche die Anfrage ist, die den Fehler verursacht, den Sie erwähnen. Wenn meine Vermutung richtig ist, behandeln Sie es und Sie werden sehen, dass der nächste POST vom Kunden korrekt ausgeführt wird.
Tags und Links javascript cordova jquery php ajax