function getData(jsonAddress) {
      var data = new Array();
      var xhr = $.getJSON(jsonAddress, function(meas) {
        for (var i = 0; i < meas.length ; i++) {
          var dt = datetimeSplitter(meas[i].valuedate);
          data[i] = [Date.UTC(dt[0],dt[1]-1,dt[2],dt[3],dt[4],dt[5]),parseInt(meas[i].value,10)];
        };
      });
      alert(data);
    }

Ich möchte die Variable "Daten" der Funktion getData zur Verfügung stellen, damit ich sie zurückgeben kann (in diesem Fall Warnung). Ich habe verstanden, dass es sich um ein Problem des Umfangs handelt, das durch Schließen gelöst werden kann. Ich habe auch verstanden, was ein Abschluss ist, kenne aber definitiv nicht die Syntax für diesen speziellen Fall.

-1
pm.calabrese 8 Okt. 2012 im 04:43

3 Antworten

Beste Antwort

Es ist kein Problem des Umfangs, es ist ein Problem der asynchronen Rückrufe.

Sie müssen eine Rückruffunktion an diese Methode übergeben, um die Antwort Ihres getJSON() -Aufrufs zu erhalten.

5
alex 8 Okt. 2012 im 00:45

$.getJSON(jsonAddress, function(meas).... ist ein asynchroner Aufruf, d. H. Eine Alarmanweisung wird aufgerufen, bevor die Rückruffunktion (bei der Daten mit Antwortwerten festgelegt werden) aufgerufen wird. Wenn Sie den Alarm innerhalb der Rückruffunktion verschieben, werden Sie feststellen, dass er die richtigen Werte aufweist.

3
I Hate Lazy 8 Okt. 2012 im 00:54

Wenn Sie einen asynchronen Aufruf wie den so oft vorgeschlagenen nicht wirklich verwenden können, können Sie stattdessen auch ($ .ajax) [http://api.jquery.com/jQuery.ajax/] verwenden - $ .getJSON ist nur ein Variation davon - und machen Sie es synchron - Bitte beachten Sie, dass dies nicht die empfohlene Methode ist, da Ihre Anwendung blockiert wird, während der Browser die Daten synchron abruft.

0
Joscha 8 Okt. 2012 im 01:16