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?

0
JS-JMS-WEB 12 Aug. 2015 im 16:38

4 Antworten

Beste Antwort

$.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)});
3
Dal Hundal 12 Aug. 2015 im 13:43

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 *************/
0
Love-Kesh 12 Aug. 2015 im 13:46

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/

1
Juned Lanja 12 Aug. 2015 im 13:45

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);
}); 
0
Abhijith A C 12 Aug. 2015 im 14:01