2016-03-23 10 views
0

Ich arbeite mit meinem Raspberry Pi. Ich habe meine Raspberry Pi, die auf der IP: 192.168.X.X/file.json geben Sie mir eine Webseite mit Daten in JSON. Während eine Webseite zu bauen versucht, die mit dem folgenden Code in die Seite anfordert:Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden, wenn Sie versuchen, eine Verbindung zu Raspberry

$.getJSON('http://192.168.X.x:8080/file.json', function(data) { 
    //code } 

Es gibt die einen Fehler im Browser:

XMLHttpRequest nicht http://192.168.X.X:8080/file.json laden kann. Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden. Ursprung 'http://localhost:8080' ist daher nicht erlaubt.

Können Sie mir sagen, wie ich es beheben kann? Und wo den Code setzen, um es zu beheben?

+0

Dies ist ein CORS-Problem: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS Sie müssen die folgenden Header hinzufügen: 'Access-Control-Allow-Origin: *', 'Access-Control-Allow -Methoden: * 'auf die Antwort Ihres Servers (' * 'ist für Dev-Zwecke, sollten Sie die Domäne in Produktion anfordern). Welche Servertechnologie verwenden Sie? – cl3m

+0

Der Browser möchte nicht, dass die aktuelle Webseite mit anderen Webseiten kommuniziert. Sie erhalten diesen Fehler nicht, wenn Sie das JavaScript ausgeführt haben, während sich Ihr Browser bereits auf einer Seite befindet, die von Ihrem Raspberry Pi gehostet wird. Sie können die Seite entweder so gestalten, dass sie von anderen Webseiten aus zugreifbar ist (CORS, wie oben erwähnt), oder Sie können das JavaScript auf einer HTML-Seite auf dem Raspberry Pi hosten, wodurch Sie dieses Problem auch während der Entwicklung kennenlernen Dein JS. – LinuxDisciple

Antwort

1

Ihr Problem bezieht sich auf Cross-Origin Resource Sharing (CORS): Grundsätzlich können Sie nicht über Ajax auf eine Domäne zugreifen, wenn es auf der Serverseite nicht erlaubt ist. Dies ist eine "Sicherheits" -Funktion in den meisten modernen Browsern. Dieses Problem tritt nicht auf, wenn Sie eine Befehlszeile wie curl oder die Postman-Erweiterung von Chrome verwenden.

Sicherstellen, dass die Domäne, die die Daten anfordert (localhost) im Header Access- Control-Allow-Origin erlaubt ist, sowie das http Verb (GET, POST, PUT ... oder * für alle HTTP-Methoden).

Grundsätzlich kommt es auf die beiden folgenden Kopfzeilen auf den http://192.168.X.x/ Server-Antwort hinzuzufügen:

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: * 

Wenn Sie node.js mit Express verwenden, können Sie Folgendes tun:

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    // or res.header("Access-Control-Allow-Origin", "localhost"); 
    res.header("Access-Control-Allow-Headers", "*"); 
    next(); 
}); 
0

Sie müssen Ihren Webserver konfigurieren, um die entsprechenden CORS-Antwortheader festzulegen.

Verwandte Themen