Sir Quicksand: AJAX - Rückgabewert ist Array - weitere Verarbeitung mit JS

Hallo Leute,

zur Info: es funktioniert der Ablauf AJAX Objekte erstellen, Kommunikation zum Server, Verarbeitung der Anfrage, Zurückschicken vom Server an den Client . . . .

. . . . wenn normales HTML zurückgegeben wird. Gebe ich aber ein Array zurück:

Server

<?
...
$rueckgabe[0] = "hallo1";
$rueckgabe[1] = "hallo2";

echo $rueckgabe;
?>

Client

Benutze ich folgendes:
alert( req.responseText);

Kommt "Array" raus.

Benutze ich dieses:
alert( req.responseText[0]);

Kommt "h" raus.

Wie komme ich jetzt an meine übergebenen Arrays ran?

Danke für die Unterstüztung

  1. Grüße,

    alert( req.responseText[0]);

    kleb das doch mit impolde zu einem string zusammen^^ oder brauchst du es als array? btw - was gibt [1] [2] etc raus? hast du tatsächlich key pro buchstabe?

    MFG
    bleicher

    --
    __________________________-
    Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
    Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
    Boccaccio
    1. kleb das doch mit impolde zu einem string zusammen^^

      Wollte ich ich nicht, wäre letzte Lösung, da muß es aber was besseres geben

      »»oder brauchst du es als array?
      wäre schön

      was gibt [1] [2] etc raus?
      0 = h
      1 = a
      2 = l
      usw. gibt also "hallo"

  2. Hallo,

    Wie komme ich jetzt an meine übergebenen Arrays ran?

    Mit req.responseXML anstatt req.responseText, vorausgesetzt, die Response ist XML.

    Viele Grüße,
    Horst Haselhuhn

  3. Hi,

    $rueckgabe[0] = "hallo1";
    $rueckgabe[1] = "hallo2";

    echo $rueckgabe;

    Ist das hier ein Tippfehler? Das gibt bei mir nur "Array" aus, und nicht den Inhalt des Arrays.

    mfG,
    steckl

  4. n'abend,

    <?
    ...
    $rueckgabe[0] = "hallo1";
    $rueckgabe[1] = "hallo2";

    echo $rueckgabe;
    ?>

    Dein Problem liegt in deinem PHP Script. Du kannst ein Array nicht einfach mit echo ausgeben. Um etwas du könntest das ganze entweder mit PHPs JSON Modul machen (sofern bei dir vorhanden), oder dir selbst eine Repräsentation deiner Daten bauen, die du in Javascript direkt nutzen kannst. Dazu hast du entweder die Möglichkeit ein XML Dokument zu bauen, selbst JSON basteln, oder die Daten in irgendeinem proprietären Format (von mir aus »Datensätze getrennt durch Zeilenumbruch«) ausgeben, das du auf dem Client wieder auseinanderpflücken kannst.

    JSON (Javascript Object Notation):

    echo '["', join( '",', $rueckgabe ), '"]';  
    // erzeugt: ["hallo1","hallo2"]
    

    XML

    echo '<array>';  
    foreach( $rueckgabe as $wert )  
    {  
      echo '<wert>', $wert ,'</wert>';  
    }  
    echo '</array>';  
    // erzeugt: <array><wert>hallo1</wert><wert>hallo2</wert></array>
    

    Eigenbrotgebackenes:

    echo '<array>';  
    echo join( "\n", $rueckgabe );  
    // erzeugt: hallo1  
    hallo2
    

    alert( req.responseText);

    solltest du dich für die XML-Variante entscheiden, möchtest du req.responseXML.documentElement benutzen, um ein XML-Dokument zu bekommen (Welches du mit den bekannten DOM-Methoden ansprechen kannst)

    Wie komme ich jetzt an meine übergebenen Arrays ran?

    im Falle von Variante 1 (JSON) bringt dich das böse eval() weiter:
    var rueckgabe = eval( '('+ req.responseText +')' );

    im Falle von Variante 3 (Eigenbrotsuppenküchenchef) ist dir String.split() wohlgesinnt:
    var rueckgabe = req.responseText.split("\n");

    für komplexere Strukturen empfiehlt sich der Einsatz von XML - zumindest, wenn das später auch von anderen Tools benutzt werden soll. Die JSON Variante ist eine schnelle Geschichte, solltest du Zugriff auf die JSON-Funktionen des PHP-JSON-Extension haben, nutze sie. Sie nimmt dir "lästiges" prüfen deiner Daten und aushebeln von Steuerzeichen ab, die du mittels addslashes() sonst selbst behandeln müsstest. Von der Suppenküchenbrot-Variante würde ich - aus diversen Gründen - die Finger lassen, wenn du keine triftigen Gründe dafür hast.

    weiterhin schönen abend...

    --
    #selfhtml hat ein Forum?
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
    1. Ich danke Dir in maximaler Form. Ich benutze Variante 1.

      Trotzdem hast Du einen kleinen Fehler drinnen gelassen:
      echo '["', join( '","', $rueckgabe ), '"]';

      Da fehlt das zweite " nach join( '",

      Trotzdem bekommst Du ein dickes, goldenes Sternchen ins Klassenbuch eingetragen :daumen: ^^

      1. n'abend,

        Ich danke Dir in maximaler Form. Ich benutze Variante 1.

        ist das dann mea dankus dia maximus?

        Trotzdem hast Du einen kleinen Fehler drinnen gelassen:
        echo '["', join( '","', $rueckgabe ), '"]';
        Da fehlt das zweite " nach join( '",

        passiert im Eifer des zeitaltergerechten vollautomatisch-ladenden 50-Schuss-pro-Sekunde heruntergetippten und treffergenauigkeitsungetesteten code-Feuergefechts leider mal :)

        Trotzdem bekommst Du ein dickes, goldenes Sternchen ins Klassenbuch eingetragen :daumen: ^^

        Klassenbuch? goldene Sternchen? Holt mich hier raus - ich bin ein Superstar!

        weiterhin schönen abend...

        --
        #selfhtml hat ein Forum?
        sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
  5. echo $begrüßung;

    . . . . wenn normales HTML zurückgegeben wird. Gebe ich aber ein Array zurück:

    Server

    <?
    ...
    $rueckgabe[0] = "hallo1";
    $rueckgabe[1] = "hallo2";

    echo $rueckgabe;
    ?>

    Wenn ein Array - was ja ein ziemlich komplexes Gebilde sein kann - in einen String-Kontext gebracht wird, ergibt das nur das Wort "Array". Das ist normal so.

    Wie komme ich jetzt an meine übergebenen Arrays ran?

    Zunächst musst du es erst einmal richtig übergeben. Du kannst es dazu in XML umpacken oder ein Format namens JSON verwenden. Ausreichend neuere PHP-Versionen bringen dafür bereits entsprechende Funktionen mit: http://de.php.net/manual/en/ref.json.php

    echo "$verabschiedung $name";