Array wird nicht übertragen

Thomas D

Erfahrenes Mitglied
Code 1 (funktioniert):

AJAX-Part:
Code:
function beiSubmit ()
{
	http.open ("POST", "Test.php?kategorie=6", true);
	http.onreadystatechange = speichernAjaxOkay;
	http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	http.send("datum=2007-4-23 2:0&promotion=1&event=1&match[]=3;12&match[]=7;9");
}

function speichernAjaxOkay ()
{
	if (http.readyState == 4)
		alert (http.responseText);
}

PHP-Part:

Code:
echo "Kategorie: " .$_GET["kategorie"];
echo "Post-Datum: " .$_POST["datum"];
echo "Matches: " .$_POST["match"];
echo "Sizeof: " .sizeof ($_POST["match"]) ." ";

for ($c=0; $c<sizeof ($_POST["match"]); $c++)
	echo $_POST["match"][$c] ."|";

Array wird korrekt interpretiert (sizeof = 2).

*******************************************************************************

Code 2 (funktioniert nicht):

AJAX-Part:

Code:
http.open ("POST", "aktNeuesSpiel.php?kategorie=6", true);
http.onreadystatechange = speichernAjaxOkay;
http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
http.send("datum=2007-4-23 2:0&promotion=1&event=1&match[]=3;12&match[]=7;9");

PHP-Part:

Code:
echo "Match: " .$_POST["match"];
echo "Match[0]: " .$_POST["match"][0];
echo "Sizeof: " .sizeof ($_POST["match"]);
echo "Event: " .$_POST["event"];
echo "Datum: " .$_POST["datum"];

Array wird nicht übertragen (sizeof = 1 = Leerarray), der Rest schon.

Nun meine Frage: Wieso funktioniert die Übertragung in Code 1, misslingt aber in Code 2? Die Codes sind ja nahezu ident. Die AJAX-Kommunikation funktioniert auch, da Datum, Eventnummer usw. korrekt übergeben werden. Einzig beim Array spießt es sich. Ich habe das ganze durch ein zweites AJAX-HTTP-Objekt versucht, mit demselben negativen Resultat. Alle 4 Dateien liegen übrigens am selben Server. Gibt es hierfür irgendeine Erklärungsmöglichkeit - bin schon am verzweifeln :( ...

Ich habe KEINE logische Erklärung für dieses Problem und bin daher für JEDEN Hinweis dankbar!

MfG, Thomas D.
 
Geht dir in Code 2 nicht die Funktion speichernAjaxOk ab, die aufgerufen wird wenn sich dein response state ändert?
 
Also soweit ich Ajax verstanden habe, sollte doch die Funktion speichernAjaxOk erst dann aufgerufen, wenn sich der Zustand vom response objekt ändert: Das heisst du musst glaube ich in dieser Funktion die Daten deiner HTML Seite ändern. Soweit ich dein Script verstehe, wird die Response wenn sie zurückkommt nur als alert ausgegeben, aber nicht verarbeitet, sodass sich der Seiteninhalt deswegen nicht ändert.

Versuch mal folgendes:
Im Php
PHP:
echo "<div id=\"field\"></div>";

Im Javascript speichernAjaxOk (im if)
Code:
var field = document.getElementById('field'); 
field.innerHTML = http.responseText;


Bin zwar nicht der Ajax spezialist, aber vielleicht hilfts ja weiter

Lg
 
Also soweit ich Ajax verstanden habe, sollte doch die Funktion speichernAjaxOk erst dann aufgerufen, wenn sich der Zustand vom response objekt ändert: ...

Tut's ja auch (4 = vollständig geladen und übertragen):

Code:
if (http.readyState == 4)
		alert (http.responseText);

Übrigens noch die Ausgabe zu den beiden Fällen:

Fall 1: Kategorie: 6Post-Datum: 2007-4-23 2:0Matches: ArraySizeof: 2 3;12|7;9|

Fall 2: Match: ArrayMatch[0]: ASizeof: 1Event: 1Datum: 2007-4-23 2:0

Beim zweiten wird also nur ein Leerarray übertragen und folglich der String "Array" ausgewertet - $_POST["match"][0] = 'A' ...
 
Die funktionierende Variante liefert

Array
(
[datum] => 2007-4-23 2:0
[promotion] => 1
[event] => 1
[match] => Array
(
[0] => 3;12
[1] => 7;9
)

)

Die nicht funktionierende

Array
(
[datum] => 2007-4-23 2:0
[promotion] => 1
[event] => 1
[match] => Array
)

Und ich weiß leider beim besten Willen nicht, wieso das so ist :confused: ...
 
Zurück