Rol: Frage zu JSON

Hallo,

ich möchte eine kleine AJAX Anwendung schreiben.

Vom Server soll nach einer Anfrage ein Objekt zurück gegeben werden.
Mein Perl Script macht das zum testen so:

print "[{'id':'0815','param1':'4711'}]";

In meiner Calback Funktion kommt das auch an:

function test()
{
if (http_request.readyState == 4 && http_request.status == 200)
{
foo = eval ("(" + http_request.responseText + ")");
alert(http_request.responseText);
alert(foo.id);
}
}

Der erste alert gibt "[{'id':'0815','param1':'4711'}]" zurück, der zweite aber undefined. Was muß ich machen um an id, param1 usw zu kommen?

Gruß
Rol

  1. [{'id':'0815','param1':'4711'}]

    Werd dir klar darüber, was du hier machst:

    [
       {
          'id' : '0815',
          'param1':'4711'
       }
    ]

    Das ist

    1. Ein Array-Literal [ ... ], du erzeugst also ein Array
    2. Darin notierst du ein Object-Literal { ... }, also ein Object
    3. Diesem Object gibst du zwei Parameter, id und param1

    Du hast also einen Array mit einem Object drin

      alert(foo.id);  
    

    foo ist der Array
    Der Array hat keine Eigenschaft namens id
    Das Object, das du suchst, ist im ersten Array-Element, also foo[0]

    Wenn du direkt mit foo.id arbeiten willst, solltest du das Object nicht noch einmal mit dem Array-Literal [...] in einen Array kapseln.

    Mathias

  2. Hi,

    Mein Perl Script macht das zum testen so:
    print "[{'id':'0815','param1':'4711'}]";

    warum packst du das Object, das du modellieren möchtest, noch in ein Arry mit nur einem Element?

      foo = eval ("(" + http\_request.responseText + ")");  
      alert(http\_request.responseText);  
      alert(foo.id);  
    

    Der erste alert gibt "[{'id':'0815','param1':'4711'}]" zurück, der zweite aber undefined.

    Natürlich. Das Array hat keine Eigenschaft names id, nur das im ersten (und einzigen) Arrayelement enthaltene Object.

    So long,
     Martin

    --
    Funktion und Referenz auf diese sind mir bekannt, mit Zeigern kann ich nicht viel mehr anfangen, als damit auf Buttons zu klicken.
      (Ashura)