ebody: Wie kann ich auf das Objekt/Array zugreifen?

Hallo,

über ein AJAX Script erhalte ich Daten (ein JSON Objekt) einer API zurück.

console.log('Daten erfolgreich geladen: ', response) gibt in der Console folgendes aus:

array(1) {
  [0]=>
  array(35) {
    ["userreview_count"]=>
    int(0)
    ["offer_count"]=>
    int(0)
    ["description"]=>
    string(1489) "abc" 
    ...
}

Ich verstehe es so, dass das JSON Objekt ein Array enthält, das erste Element des Arrays ist ein Objekt mit 35 Elementen.

Um z.B. den Wert von ["description"] auszugeben, habe ich jeweils mit console.log() folgendes probiert:

response[0].description

Aber auch andere Varianten...

response[0]["description"]

response[0["description"]]

response.description

...die alle undefined angezeigt haben.

Wie kann man auf ["description"] zugreifen und den Wert ausgeben?

Gruß ebody

  1. Hallo ebody,

    console.log('Daten erfolgreich geladen: ', response) gibt in der Console folgendes aus: (...)

    Glaube ich nicht. Das ist keine console.log Ausgabe von JS, sondern eine print_r Ausgabe von PHP. Sowas könnte in JS nur erscheinen, wenn Du kein JSON Objekt, sondern ein print_r Ergebnis aus PHP an den Browser schickst.

    überprüfe bitte, dass Du da ein JSON Objekt hast und keinen String.

    Diese beiden Zugriffe in JS wären richtig:

    response[0].description
    
    response[0]["description"]
    

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hallo Rolf,

      vielen Dank. Ich war schon am verzweifeln.

      Im PHP Script habe ich das Ergebnis der Abfrage so ausgegeben: var_dump(json_decode($output, true));

      Jetzt verwende ich: echo $output;

      Und kann mit response[0].description auf den Wert von Description zugreifen.

      Gruß ebody

      1. Hallo ebody,

        var_dump(json_decode($output, true));

        Ja. Hm. Kann man machen. Zum Debuggen ohne Brauser 😉. Könnte man so bauen, dass diese Ausgabeform durch einen speziellen URL Parameter aktiviert wird.

        Wieauchimmer. Setzt Du auch den Content-Type Header auf application/json?

        Rolf

        --
        sumpsi - posui - obstruxi
        1. Setzt Du auch den Content-Type Header auf application/json?

          Hatte ich gemacht, dann die Codezeile in PHP wieder entfernt und es hat trotzdem funktioniert. Im jQuery Script verwende ich $.ajax({...dataType: 'json'...}).

          Gruß ebody

          1. Hallo ebody,

            api.jquery.com sagt zu dataType in $.ajax: (fett von mir)

            dataType (default: Intelligent Guess (xml, json, script, or html))

            Type: String

            The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, (…) JSON will yield a JavaScript object, (…) script will execute the script, and anything else will be returned as a string).

            D.h. wenn Du in jQuery sagst, dass er die Response als JSON interpretieren soll, ist es wurscht, was der Server liefert. Und wenn dein Server sagt, was er da liefert, musst Du es in jQuery nicht angeben.

            Es ist aber trotzdem guter Stil, wenn ein Server seinen Content mit dem richtigen Content-Type ausliefert. Für den Fall, dass mal jemand anderes als jQuery die Daten holt (z.B. das fetch API). Wenn der Client dann auhc noch spezifiziert, was er erwartet, ist der Code schön selbsterkärend.

            Rolf

            --
            sumpsi - posui - obstruxi
            1. Danke für den Hinweis. Habe jetzt header('Content-Type: application/json'); ins PHP Script eingefügt.

              Gruß ebody