Ich bin mir ziemlich sicher, dass JSONP keine domänenübergreifenden Einschränkungen bedeutet. Ich versuche, einen JSONP-Dienst mit Node und Express zu erstellen. Hier ist einfacher Code:
self.routes['/portfolio'] = function(req, res) {
// Website you wish to allow to connect
res.jsonp({ "my": "object" });
};
Wenn ich es tue:
$.getJSON('http://127.0.0.1:8080/portfolio', function(data){ console.log(data)});
Ich bekomme diesen Fehler.
XMLHttpRequest kann http://127.0.0.1:8080/portfolio nicht laden. Das Der Header 'Access-Control-Allow-Origin' hat einen Wert "http://127.0.0.1:8080/portfolio" entspricht nicht dem angegebenen Wert Ursprung. Origin 'http://api.jquery.com' ist daher nicht zulässig Zugriff.
Kann jemand erklären, was hier los ist? Warum müssen wir den Header-Wert angeben, wenn dies JSONP ist? Wie kann ich diese Arbeit domänenübergreifend gestalten?
4 Antworten
$.getJSON
behandelt die Anforderung nicht als JSONP , es sei denn enthält die Anforderungs-URL eine Zeichenfolge wie callback=?
.
Versuchen Sie dies stattdessen.
$.getJSON('http://127.0.0.1:8080/portfolio?callback=?', function(data){ console.log(data)});
Fügen Sie den folgenden Code in app.js oder server.js ein
/ ************* Um den Zugriff auf domänenübergreifende Anfragen zu ermöglichen ************* /
app.all('*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
});
/*************To Allow access to cross domain request *************/
Eigentlich müssen Sie nur? Callback =? Hinzufügen, den Rest erledigt jQuery.
$(document).ready(function() {
$.getJSON('http://127.0.0.1:8080/portfolio?callback=?', function(data) {
console.log(data);
});
});
Quelle: http://api.jquery.com/jQuery.getJSON/
Verwenden Sie $ .ajax mit dem Datentyp jsonp
$.ajax({
type: 'GET',
cache: false,
url: 'http://portfoliomanager-sran.rhcloud.com/portfolio?callback=?',
dataType: 'jsonp'
}).then(function(response){
console.log(response);
});