jQuery: JSON parsen

  • Hi,


    bei mir klappt das JSON parsen nicht, bzw. ich bin zu blöd es zu verstehen!? ?(:cursing:
    Ich möchte das JSON Array in jeweils 2 Variablen schreiben, jedoch steht in denen jeweils "undefined".


    data: [{"min":"2015-02-12 07:14:25","max":"2015-03-04 11:10:27"}]


    JavaScript
    $.ajax({
    		url: 'script/charts.php?select=6',
    		success: function(data){
    			var obj = jQuery.parseJSON(data);
    			var min = obj.min;
    			var max = obj.max;
    			}
    	});


    Was ist nicht korrekt?
    Danke schonmal!

  • JQuery ist nicht mein Fall aber ich denke es liegt daran,
    dass Du obj, min und max in der function success neu (local) definierst.
    Probier mal

    JavaScript
    // globaler raum
    var obj, min, max;
            $.ajax({
    		url: 'script/charts.php?select=6',
    		success: function(data){
    			obj = jQuery.parseJSON(data);
    			min = obj.min;
    			max = obj.max;
    			}
    	});


    Wenn ich mich richtig erinnere, dann wird ja die success function ausgeführt sobald die ajax request erfolgreich war.
    Dort drin definierst Du locale vars, die ja nach "Ende" der function verloren gehen.


    Auch möglich:
    - was sagt die Console? (Rechtsklick->Element untersuchen -> Console)
    - kommen Daten überhaupt an? Testweise in der seccess function einmal ausgeben lassen

  • cottton: warum genau sollte man globale Variablen definieren die man nur in der Funktion braucht? Sinn?


    Schmakus: du bekommst ein Array zurück (eckige Klammern am Anfang und am Ende) - also solltest du davon auch das erste Element auswählen (index 0):


    JavaScript
    $.ajax({
        url: 'script/charts.php?select=6',
        success: function(data){
    	var obj = JSON.parse(data[0]),
                min = obj.min,
    	    max = obj.max;
        }
    });
  • lauras
    obj, min und max sind doch aber außerhalb der success function nicht verfügbar, oder?
    Das wird doch in JQuery nicht anders sein.


    Sinn - ich bin davon ausgegangen, dass er die vars auch "später" noch braucht und nicht nur da drin definieren und "liegen lassen" will =)

  • Die Variablen sind auch außerhalb der Funktion nicht verfügbar (bzw. dann undefined) da ein Ajax-Aufruf asynchron ist.
    Demnach muss alles was davon abhängt in die success Funktion, somit sind globale Variablen sinnlos (außer mit ihnen passiert VORHER noch was - aber dann wären sie ja nicht direkt darüber definiert..)

  • Dann kommt man als mit einer Funktion am besten "da raus", oder?
    Oder wie verhält sich die Funktion dann? Auch async?
    Ich hab das "Problem" momentan bei pthreads - wenn man aus einem anderen Kontext Methoden aufruft.


    Oder anders gefragt:

    JavaScript
    var global_var;
    function myFunc(data){
        global_var = data;
    }
    $.ajax({
        url: 'script/charts.php?select=6',
        success: function(data){
    	myFunc(data); 
        }
    });


    wird global_var gesetzt sein?

  • Ja - aber eben erst wenn die Funktion aufgerufen wird (dazu braucht es auch die Funktion nicht) .. das hat nichts mit global oder nicht global zu tun sondern einfach mit der Reihenfolge in der der Code ausgeführt wird..



    Variablen die nicht im Scope der callback-Funktion liegen aber von dieser verwendet werden machen meist nur Sinn wenn sie von mehreren Funktionen die per Callback hintereinander aufgerufen werden verwendet werden (z.B. wenn es eine Schleife gibt und darin irgendwas hochgezählt wird)
    Falls du genauere Infos brauchst oder ein genaues Problem hast schreib mir ne PN - gehört ja nicht wirklich hier rein ;)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!