[JQuery] JSON-Objekt als Objekt aus Datei auslesen

Yaslaw

alter Rempler
Moderator
Ich habe eine Datei mit einem Objekt im JSON-Format.
Dieses Objekt will ich jetzt mit JQuery (oder Javascript allgemein) einlesen und als Objekt zur Verfügung haben.

Auf der Suche bin ich auf $.getJSON() gestossen. Doch alle Besipiele verarbeiten nachher das Resultat sofoert. Ich muss es aber speichern um später verwenden zu können

Ich habe es unter anderem damit versucht, jedoch wird dabei der JSON-String nicht in ein Objekt geparst.
Javascript:
var rules = $.getJSON('ear/cfg/uploadRules.json');

Auch beim folgenden kennt er anschliessend das Objekt nicht. data beinhaltet den aufgebrösmelten JSON als Objekt - also dass was ich eigentlich haben will, blos ausserhalb des Befehls.
Javascript:
var rules;
$.getJSON('ear/cfg/uploadRules.json', function(data){
    rules = data;
});
 
$.getJSON sendet einen asynchronen Request, du kannst mit dem Ergebnis also erst arbeiten, wenn die Antwort eingetroffen ist.

#1 funktioniert obendrein nicht, weil der Rückgabewert von $.getJSON kein JSON, sondern jqXHR ist.

Du könntest entweder einen synchronen Request nutzen(wenig empfehlenswert, weil das UI solange blockiert ist), oder aber die Verarbeitung von rules erst im callback anstossen.

Das Einfachste wäre aber wohl, statt dieser json-Datei gleich eine js-Datei zu nutzen, welche du einbindest(könnte bspw. ein serverseitiges Skript sein welchem du den Variablen-Namen(rules) als Parameter mitgibst), oder aber auch hardgecodet, wenn du keine Dynamik benötigst.
 
Zuletzt bearbeitet:
Das mit der js-Datei scheidet aus. Es geht um Regeln für ein Upload. Diese sollen Javaseitig verwednet werden können, gleichzeitig aber auch von PHP ausgelesen werden, da ich unbedingt im PHP-Script die Validierung nochmals mit filter_input() durchführen will.

Wie kann ich im asynchronem Prozess prüfen ob das Resultat schon da ist? Die Regeln werden ja erst später gebraucht.

Und wie könnte ich im callback die Verarbeitung anstossen? (callback - also eine vordefinierte funktion?)
 
Hm.. Da ich gleich nach dem Aufruf die ersten Informationen brauche um damit plupload zu füttern, kommt der asynchrone Einsatz glaub doch nicht zum Einsatz. Wie kann getJSON() synchrom laufen lassen?
 
$.getJSON ist nur eine Shorthand-Methode für $.ajax, nutze daher stattdessen $.ajax (dort kannst du den async-parameter festlegen)

Andere Idee:
Benutze soetwas als json-Datei:
Code:
rules=
{"foo":"bar",
"bla":"blubb"}

Du kannst es direkt als JS-Datei einbinden, aber auch das JSON in PHP verarbeiten(ignoriere einfach die erste Zeile beim Einlesen)

Oder noch einfacher:

Code:
<script  type="text/javascript">
rules=<?php echo file_get_contents('ear/cfg/uploadRules.json'));?>;
</script>
 
Zuletzt bearbeitet:
Die letzte Methode gefällt.
Wie mache ich dann rules so global, dass ich es nachher in einem anderen Script verwenden kann?

Da ich auch mit smarty arbeite ist das ganze Script in eine js.Datei ausgelageert, damit es mit den {} keine Probleme gibt
Ergo müsste dann im Header sowas stehen
HTML:
<script  type="text/javascript">
rulesJson=<?php echo file_get_contents('ear/cfg/uploadRules.json'));?>;
</script>
<script src="myscript.js" type="text/javascript" ></script>
in myscript.js soll nun rulesJson bekannt sein. myscript.js soll eine reine js-Datei bleiben und nicht mit php geparst werden.


Sorry für die Fragerei - doch Javascript ist für mich als OOP und SQL Programmierer irgendwie immer noch nicht durchsichtig was da wirklich wie und in welcher Reihenfolge mit welchen Gültigkeiten verarbeitet wird.
 
Wie mache ich dann rules so global, dass ich es nachher in einem anderen Script verwenden kann?

Das ist es bereits. Die Scripte werden nacheinander abgearbeitet, myscript.js also als Letzteres von beiden.

rulesJson ist auch bereits global, da du es nicht in einem speziellen Scope definiert hast ist der Scope das window-object(in JS ist dies das "globale" Object), du kannst also von überall per rulesJson oder window['rulesJson'] darauf zugreifen.
 
*freu*
Das Funktioniert sogar. Und es war einfacher als erwartet. So kann ich dieselben Settings im PHP und im Javascript gebrauchen!
 

Neue Beiträge

Zurück