Javascript Array zu PhP?

Ich habe derzeit das Problem, dass ich ein Array in Javascript habe, es aber per PHP weiterverarbeiten möchte. Ist es möglich ein Javascript Array zu einem PHP Array zu machen, wenn ja wie? (Jetzt kommt mir nicht mit sowas wie „Ajax“ „Boardsuche“ „Google“! 1. Ich weiß, dass ich mit Ajax arbeiten muss: Ich benutze dafür Prototype. 2. Hab ich benutzt. 3. Hab ich ebenfalls benutzt.)

Und was genau funktioniert nicht?

Ressourcen:

Es ist nicht unbedingt nötig, die Daten durch JSON zu schleifen, aber es ist sehr praktisch, da so vollständige Objekte einfach ausgetauscht werden können.

[code]<?php // z.php

if (isset($_SERVER[‚HTTP_X_REQUESTED_WITH‘]) &&
($_SERVER[‚HTTP_X_REQUESTED_WITH‘] == ‚XMLHttpRequest‘)
) {
// Wir haben einen Ajax-Request

// Magic Quotes, I hate you so much
if (get_magic_quotes_gpc()) {
    $_GET['data'] = stripslashes($_GET['data']);
}

// JSON-String im Feld "data" in Objekt umwandeln
$data = json_decode($_GET['data']);

// Mit Objekt arbeiten
$data->company .= ' (modified by PHP)';
$data->limit   += 30;

// Optional wieder Daten im JSON-Format zurückgeben
echo json_encode(array('data' => $data));

// Ausführung endet hier
exit;

}

?>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>New</title>

    <script type="text/javascript" src="prototype.js"></script>

    <script type="text/javascript">

    window.onload = function () {

        var testData = {company: 'example', limit: 12};

        // Diese Datei heißt bei mir z.php. Gegebenenfalls durch den
        // passenden Namen ersetzen
        new Ajax.Request('z.php', {
            method     : 'get',
            parameters : {data : Object.toJSON(testData)},
            onSuccess  : function (transport)
            {
                // Rückgabedaten entgegennehmen, in JavaScript-Objekt umwandeln und
                // ausgeben
                var responseData = transport.responseText.evalJSON();
                var testData     = responseData.data;

                alert("Success!\n\n"
                    + "company : " + testData.company + "\n"
                    + "limit : " + testData.limit);
            }
        });
    };

    </script>

</head>

<body>

</body>
[/code]

Jetzt ist noch das Problem, dass überhaupt keine Daten abgeschickt werden:


this.editsubmit = function(element) {
         form = $(element);
         var formdata = {};
         for(i = 0; i < form.elements.length; i++) {
             formdata[form.elements[i].name] = $F(form.elements[i]);
         }
         $(element).innerHTML = "Saving...<img src=\"../includes/css/images/loading.gif\">";
         new Ajax.Request("save.php", {
                                            onSuccess : function(response) {
                                                if(response.responseText == "Failure") $(element).innerHTML = "<b>Could'nt edit successfully! Please try again! If this error persists, please inform an admin or contact the support</b>";
                                                else $(element).innerHTML = "";
                                            },
                                            parameters : {data : formdata}
                                            });
     }

Wenn ich noch z.B. test als parameter mit dem Wert „Test“ einfüge, wird dieser auch übergeben. data jedoch nicht.

Vielleicht hilft es dein PHP-Skript mit den gewünschten Variablen als Parameter aufzurufen?
Dein Szenario ist leider ziemlich schwammig beschrieben.

EDIT:
Hab leider nicht gesehen, dass schon geantwortet wurde.

  • In formdata ist im JavaScript auch was drin?
  • Du verschickst den Request auf die Weise, auf die du ihn im PHP-Teil verarbeitest (GET bzw. POST)?

Keine Ahnung, wie Ajax.Request den Inhalt von formdata (ein Array) serialisiert (zu einem String macht), um ihn per GET/POST übergeben zu können. Ich bin da wie gesagt ein Freund von JSON, da weiß man in der Regel, was man hat. :slight_smile:

(ungetestet)

JS:

parameters : {data : Object.toJSON(formdata)}

Edit: Vielleicht eher Array.toJSON.

PHP:

$data = json_encode($_GET['data']);

Perfekt! Danke :wink: Funktioniert wie gedacht. Wenn man es nicht Json Codiert, übergiebt er einfach garnichts.

EDIT: Hat mir viel Nerven beim ewigen rumsuchen erspart :wink: (Ja, ich hab schon ne Stunde gesucht davor XD)