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

Beitrag lesen

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:|