it-swarm.com.de

JSONP-Kreuz-Ursprungsfehler "Es ist kein Header für Zugriffskontroll-Zulassen-Ursprung vorhanden"

Ich benutze Ajax, um Daten von Twitter über ihre API zu erhalten. Ich versuche, Jsonp zu verwenden und von dem, was ich sehen und verstehen kann, glaube ich, dass ich alles richtig mache (natürlich nicht). 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">  </script>
<script>
    $(document).ready(function () {
        $.ajax( {
            type: 'GET',
            datatype: 'jsonp',
            data: {},
            crossDomain: 'true',
            url: "http://Twitter.com/status/user_timeline/padraicb.json?count=10&callback=?",
            error: function(textStatus, errorThrown) {
                alert("error");
            },
            success: function(msg) {
                console.log(msg);
            }
        });
    });
</script>

Der obige Code generiert einen Fehler in Chrome und Firefox XMLHttpRequest kann nicht laden http://Twitter.com/status/user_timeline/padraicb.json?count=10&callback= ?. Auf der angeforderten Ressource ist kein Header "Access-Control-Allow-Origin" vorhanden. Origin 'null' hat daher keinen Zugriff.

Nach meinem Verständnis dachte ich, dass der &callback=? und der auf jsonp gesetzte Typ dies zulassen würden. Außerdem kann ich sehen, dass das JSON-Objekt in Fiddler zurückgegeben wird. Es wird einfach nicht mit dem Skript behandelt. Ich habe mehrere APIs mit dem gleichen Problem ausprobiert.

Eine solche API funktioniert auch, wenn sie in die Adressleiste eingegeben wird.

Also brauche ich nach ausgiebigem Suchen und Suchen einige, um den Ursprung auf * zu setzen. Ich dachte, das wäre eher ein serverseitiges Problem? 

Ich habe auch ?callback? versucht, aber ohne Erfolg.

Alle Ideen wären super dankbar.

9
Corey

Die besagte Ressource unterstützt jsonp, daher ist kein CORS erforderlich ... das Problem ist datatype: 'jsonp' es sollte dataType: 'jsonp' sein

$(document).ready(function () {
    $.ajax({
        type: 'GET',
        dataType: 'jsonp',
        data: {},
        url: "http://Twitter.com/status/user_timeline/padraicb.json?count=10&callback=?",
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(jqXHR)
        },
        success: function (msg) {
            console.log(msg);
        }
    });
});

Demo: Fiddle

18
Arun P Johny

Der Header sollte auf den Servern von Twitter festgelegt werden, wenn sie antworten. Wenn es nicht verfügbar ist, bedeutet dies, dass Sie mit AJAX von außerhalb der eigenen Domäne nicht auf diese Ressource zugreifen können.
Daher können Sie deren API nicht über Javascript im Browser verwenden. Sie haben einen eigenen Server eingerichtet, der als Zwischenressource für die Kommunikation mit der Twitter-API fungiert. 

Bearbeiten: An dieser Stelle muss auch darauf hingewiesen werden, dass Twitter seine nicht authentifizierten API-Anforderungen schließt. Sie müssen eine App mit Twitter einrichten und den API-Schlüssel verwenden, um Anfragen zu stellen. 

0
Munim