2012-11-12 3 views

Antwort

3

JSONP oder JSON with padding ist eine Ergänzung zum Basis-JSON-Datenformat. Es stellt eine Methode zur Verfügung, um Daten von einem Server in einer anderen Domäne anzufordern, was von typischen Webbrowsern aufgrund der gleichen Herkunftsrichtlinien verboten ist.

Unter derselben Herkunftsrichtlinie kann eine von server1.example.com bereitgestellte Webseite normalerweise keine Verbindung mit einem anderen Server als server1.example.com herstellen oder mit diesem kommunizieren.

Eine Ausnahme ist das HTML-Element. Einige Seiten nutzen die offene Richtlinie für Elemente, um JavaScript-Code abzurufen, der auf dynamisch generierten JSON-formatierten Daten anderer Herkunft basiert. Dieses Verwendungsmuster wird als JSONP bezeichnet.

Anforderungen für JSONP abrufen nicht JSON, aber beliebigen JavaScript-Code. Sie werden vom JavaScript-Interpreter ausgewertet und nicht von einem JSON-Parser analysiert.

Um zu sehen, wie dieses Muster funktioniert, betrachten Sie zunächst eine URL-Anfrage, die JSON-Daten zurückgibt. Ein JavaScript-Programm könnte diese URL beispielsweise über XMLHttpRequest anfordern. Angenommen, der Benutzer-ID von Foo ist 1234. Ein Browser Anforderung der URLhttp: //server2.example.com/Users/1234, vorbei an die Id von Foo, erhalten würde so etwas wie:

{"Name": "Foo", "Id": 1234, "Rank": 7} 

Dieses JSON-Daten dynamisch sein könnten basierend auf den in der URL übergebenen Abfrageparametern generiert. Hier , ein HTML-Element gibt für seine src eine URL-Attribut, das JSON zurückgibt:

<script type="text/javascript" 
    src="http://server2.example.com/Users/1234"> 
</script> 

Der Browser wird, um das Skript-Datei herunterladen, bewerten deren Inhalt, interpretieren die rohen JSON-Daten als ein Block, und einen Syntaxfehler werfen. Selbst wenn die Daten als JavaScript-Objektliteral interpretiert wurden, konnte JavaScript nicht im Browser ausgeführt werden, da auf Objektliterale ohne Variablenzuordnung nicht zugegriffen werden kann.

Im JSONP-Nutzungsmuster gibt die URL-Anfrage, auf die das src-Attribut verweist, JSON-Daten mit einem Funktionsaufruf zurück. Auf diese Weise kann eine Funktion, die bereits in der JavaScript-Umgebung definiert ist, die JSON-Daten bearbeiten. A JSONP Nutzlast könnte wie folgt aussehen:

functionCall({"Name": "Foo", "Id": 1234, "Rank": 7}); 

Der Funktionsaufruf ist die "P" von JSONP - das "padding" um die reine JSON oder nach einigem [1], um dem "prefix". Gemäß einer Übereinkunft stellt der Browser den Namen der Rückruffunktion als einen benannten Abfrageparameter bereit, typischerweise unter Verwendung des Namens JSONP oder Rückruf in seiner Anfrage an den Server, z.,

<script type="text/javascript" 
    src="http://server2.example.com/Users/1234?jsonp=parseResponse"> 
</script> 

In diesem Beispiel würde die empfangene Nutzlast sein:

parseResponse({"Name": "Foo", "Id": 1234, "Rank": 7});