371 Stimmen

Ursprung ist nicht durch Access-Control-Allow-Origin erlaubt

Ich mache einen Ajax.request zu einem entfernten PHP-Server in einer Sencha Touch 2-Anwendung (verpackt in PhoneGap).

Die Antwort des Servers lautet wie folgt:

XMLHttpRequest kann nicht geladen werden http://nqatalog.negroesquisso.pt/login.php. Ursprung http://localhost:8888 wird von Access-Control-Allow-Origin nicht zugelassen.

Wie kann ich dieses Problem beheben?

20 Stimmen

Beim Verwenden von jQuery, sorgt dataType: 'jsonp', für den gewünschten Effekt

11 Stimmen

Übrigens ist das nicht die Antwort vom Server. Genauer gesagt wird dieser Fehler auf der Client-Seite angezeigt.

2 Stimmen

Der jsonp-Trick funktioniert wahrscheinlich nicht mehr, fyi: stackoverflow.com/questions/12216208/…

10voto

steve0hh Punkte 627

Wie Matt Mombrea für den Serverbereich richtig festgestellt hat, könnten Sie auf ein weiteres Problem stoßen, nämlich die Whitelist-Ablehnung.

Sie müssen Ihre phonegap.plist konfigurieren. (Ich benutze eine alte Version von PhoneGap)

Für Cordova könnte es Änderungen im Namen und im Verzeichnis geben. Aber die Schritte sollten größtenteils dieselben sein.

Wählen Sie zuerst Unterstützende Dateien > PhoneGap.plist aus

Bildbeschreibung hier eingeben

dann unter "ExternalHosts"

Fügen Sie einen Eintrag hinzu, mit einem Wert vielleicht von "http://nqatalog.negroesquisso.pt" Ich benutze * nur zu Debugging-Zwecken.

Bildbeschreibung hier eingeben

8voto

lewsid Punkte 1890

Dies könnte nützlich sein für alle, die eine Ausnahme für die 'www' und 'non-www' Versionen eines Referrers benötigen:

$referrer = $_SERVER['HTTP_REFERER'];
$parts = parse_url($referrer);
$domain = $parts['host'];

if($domain == 'google.com')
{
    header('Access-Control-Allow-Origin: http://google.com');
}
else if($domain == 'www.google.com')
{
    header('Access-Control-Allow-Origin: http://www.google.com');
}

0 Stimmen

Zeigte mir den richtigen Weg, um den ACAO-Fehler mit Azure zu beheben. Obwohl ich den erlaubten Hostnamen von googledrive hinzugefügt hatte. Die verwendete URL muss googledrive SEIN und NICHT googledrive

7voto

antyrat Punkte 26940

Dies liegt an der Same-Origin-Policy. Weitere Informationen finden Sie auf Mozilla Developer Network oder Wikipedia.

Grundsätzlich müssen Sie, in Ihrem Beispiel, die Seite http://nqatalog.negroesquisso.pt/login.php nur von nqatalog.negroesquisso.pt und nicht von localhost laden.

1 Stimmen

Aber ich muss den Webservice von einem Mobilgerät aus laden, könnte ich dies umgehen?

0 Stimmen

Du musst einige Server-seitige Änderungen vornehmen oder JSONP verwenden de.wikipedia.org/wiki/JSONP

7voto

Francis Baptiste Punkte 445

Ich bin dies schon ein paar Mal begegnet, als ich mit verschiedenen APIs gearbeitet habe. Oft ist es eine schnelle Lösung, "&callback=?" am Ende eines Strings hinzuzufügen. Manchmal muss das kaufmännische Und ein Zeichencode sein, manchmal ein "?": "?callback=?" (siehe Forecast.io API Nutzung mit jQuery)

7voto

Dibish Punkte 8527

Ich werde Ihnen eine einfache Lösung für dieses Problem geben. In meinem Fall habe ich keinen Zugriff auf einen Server. In diesem Fall können Sie die Sicherheitsrichtlinie in Ihrem Google Chrome -Browser ändern, um Access-Control-Allow-Origin zuzulassen. Das ist sehr einfach:

  1. Erstellen Sie eine Chrome-Browserverknüpfung
  2. Rechtsklick auf das Verknüpfungssymbol -> Eigenschaften -> Verknüpfung -> Ziel

Einfach einfügen "C: \ Programme \ Google \ Chrome \ Anwendung \ chrome.exe" --allow-file-access-from-files --disable-web-security .

Der Speicherort kann sich unterscheiden. Öffnen Sie nun Chrome, indem Sie auf diese Verknüpfung klicken.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X