• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Javascript Array zu PhP?

Status
Für weitere Antworten geschlossen.

Gimli

Mitglied
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.)
 
Werbung:
Ressourcen:

- Prototype JavaScript framework: Introduction to Ajax
- Prototype JavaScript framework: Introduction to JSON

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;
}

?><!DOCTYPE html>

<html>

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

</html>
 
Werbung:
Jetzt ist noch das Problem, dass überhaupt keine Daten abgeschickt werden:
Code:
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. :)

(ungetestet)

JS:

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

Edit: Vielleicht eher Array.toJSON.

PHP:

Code:
$data = json_encode($_GET['data']);
 
Werbung:
Perfekt! Danke ;) Funktioniert wie gedacht. Wenn man es nicht Json Codiert, übergiebt er einfach garnichts.

EDIT: Hat mir viel Nerven beim ewigen rumsuchen erspart ;) (Ja, ich hab schon ne Stunde gesucht davor XD)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben