Ein Ansatz, den ich gerne verwende, ist das Auffüllen/Einhüllen der json-Datei mit einem Objektliteral und das anschließende Speichern der Datei mit der Dateierweiterung .jsonp. Bei dieser Methode bleibt auch Ihre ursprüngliche json-Datei (test.json) unverändert, da Sie stattdessen mit der neuen jsonp-Datei (test.jsonp) arbeiten werden. Der Name des Wrappers ist frei wählbar, muss aber mit dem Namen der Callback-Funktion übereinstimmen, die Sie zur Verarbeitung der jsonp-Datei verwenden. Ich werde Ihre test.json-Datei als Beispiel verwenden, um den jsonp-Wrapper für die Datei "test.jsonp" zu zeigen.
json_callback({"a" : "b", "c" : "d"});
Als Nächstes erstellen Sie eine wiederverwendbare Variable mit globalem Umfang in Ihrem Skript, um das zurückgegebene JSON zu speichern. Dadurch werden die zurückgegebenen JSON-Daten allen anderen Funktionen in Ihrem Skript zur Verfügung gestellt und nicht nur der Callback-Funktion.
var myJSON;
Als Nächstes folgt eine einfache Funktion zum Abrufen von json durch Skriptinjektion. Beachten Sie, dass wir hier nicht jQuery verwenden können, um das Skript an den Dokumentenkopf anzuhängen, da IE die jQuery-Methode .append nicht unterstützt. Die im folgenden Code auskommentierte jQuery-Methode funktioniert in anderen Browsern, die die .append-Methode unterstützen. Sie ist als Referenz enthalten, um den Unterschied zu verdeutlichen.
function getLocalJSON(json_url){
var json_script = document.createElement('script');
json_script.type = 'text/javascript';
json_script.src = json_url;
json_script.id = 'json_script';
document.getElementsByTagName('head')[0].appendChild(json_script);
// $('head')[0].append(json_script); DOES NOT WORK in IE (.append method not supported)
}
Als nächstes folgt eine kurze und einfache Callback-Funktion (mit dem gleichen Namen wie der jsonp-Wrapper), um die json-Ergebnisdaten in die globale Variable zu übertragen.
function json_callback(response){
myJSON = response; // Clone response JSON to myJSON object
$('#json_script').remove(); // Remove json_script from the document
}
Auf die json-Daten kann nun von beliebigen Funktionen des Skripts unter Verwendung der Punktnotation zugegriffen werden. Ein Beispiel:
console.log(myJSON.a); // Outputs 'b' to console
console.log(myJSON.c); // Outputs 'd' to console
Diese Methode unterscheidet sich vielleicht ein wenig von dem, was Sie gewohnt sind, hat aber viele Vorteile. Erstens kann dieselbe jsonp-Datei lokal oder von einem Server mit denselben Funktionen geladen werden. Ein weiterer Vorteil ist, dass jsonp bereits in einem domänenübergreifenden Format vorliegt und auch leicht mit REST-APIs verwendet werden kann.
Zugegeben, es gibt keine Funktionen zur Fehlerbehandlung, aber wozu braucht man die auch? Wenn Sie nicht in der Lage sind, die json-Daten mit dieser Methode zu erhalten, dann können Sie ziemlich viel wetten, dass Sie einige Probleme innerhalb der json selbst haben, und ich würde es auf einem guten JSON-Validator überprüfen.