Frage

Ich versuche, diese neue Methode, die ich serializeArray() gesehen habe.

//with ajax
var data = $("#form :input").serializeArray();
post_var = {'action': 'process', 'data': data };
$.ajax({.....etc

Also habe ich diese Schlüssel-Wert-Paare, aber wie kann ich darauf zugreifen mit PHP?

Ich dachte, ich brauchte, dies zu tun, aber es wird nicht funktionieren:

// in PHP script
$data = json_decode($_POST['data'], true);

var_dump($data);// will return NULL?

Danke, Richard

War es hilfreich?

Lösung

Wie Gumbo vorgeschlagen, den Sie bearbeiten, wahrscheinlich nicht den Rückgabewert von json_decode .
Versuchen

$data = json_decode($_POST['data'], true);
var_dump($data);

Wenn $data nicht die erwarteten Daten enthält, dann var_dump($_POST); zu sehen, was der Anruf Ajax tat Post in Ihrem Skript. Könnten Sie die JSON aus dem falschen Schlüssel zuzugreifen versuchen.

Bearbeiten
Eigentlich sollten Sie sicherstellen, dass Sie wirklich JSON senden an erster Stelle :)
Die jQuery-Dokumentation für serialize Zustand Die .serializeArray () -Methode erstellt einen JavaScript array von Objekten, bereit codierten als JSON-String zu sein. Fertig codiert werden soll, nicht JSON. Offenbar gibt es keine Object2JSON Funktion in jQuery so entweder verwenden https: // Github .com / douglascrockford / JSON-js / Blob / Master / json2.js als 3rd-Party-lib oder Verwendung http://api.jquery.com/serialize/ statt.

Andere Tipps

Die zurückgegebene JSON-Struktur ist kein String. Sie müssen ein Plugin oder Drittanbieter-Bibliothek „stringify“ verwenden. Sehen Sie diese für weitere Informationen:

http://www.tutorialspoint.com/jquery/ajax-serializearray.htm

Die OP tatsächlich noch verwendet haben könnte serializeArray () anstelle von nur serialize (), indem Sie die folgenden Änderungen vornehmen:

//JS 
var data = $("#form :input").serializeArray();
data = JSON.stringify(data);
post_var = {'action': 'process', 'data': data };
$.ajax({.....etc

// PHP
$data = json_decode(stripslashes($_POST['data']),true);
print_r($data); // this will print out the post data as an associative array

seine möglichen durch Verwendung des Serialisieren Array und json_decode ()

// js
var dats = JSON.stringify($(this).serializeArray());
data: { values : dats } // ajax call

//PHP
 $value =  (json_decode(stripslashes($_REQUEST['values']), true));

werden die Werte als Array

empfangenen

kann jeder Wert abgerufen wird $ Wert mit [0] [ 'value'] jeweils html Komponentenname als $ Wert angegeben [0] [ 'name']

print_r($value) //gives the following result
Array ( [0] => Array ( [name] => name [value] => Test ) [1] => Array ( [name] => exhibitor_id [value] => 36 ) [2] => Array ( [name] => email [value] => test@gmail.com ) [3] => Array ( [name] => phone [value] => 048028 ) [4] => Array ( [name] => titles [value] => Enquiry ) [5] => Array ( [name] => text [value] => test ) ) 

Ich habe eine sehr ähnliche Situation wie diese, und ich glaube, dass Ty W die richtige Antwort hat. Ich werde ein Beispiel für meinen Code, nur für den Fall gibt es genügend Unterschiede um das Ergebnis zu ändern, aber es scheint, als ob Sie nur die gebuchten Werte wie gewohnt in PHP verwenden können.

// Javascript
$('#form-name').submit(function(evt){
var data = $(this).serializeArray();
$.ajax({ ...etc...

// PHP
echo $_POST['fieldName'];

Dies ist ein wirklich vereinfachtes Beispiel, aber ich glaube, der entscheidende Punkt ist, dass Sie nicht möchten, dass die json_decode() Methode verwenden, da es wahrscheinlich unerwünschte Ausgabe erzeugt.

hat das Javascript nicht die Art und Weise ändern, dass die Werte gepostet nicht wahr? Sollten Sie nicht in der Lage sein, die Werte über PHP wie gewohnt für den Zugriff durch $_POST['name_of_input_goes_here']

edit: man kann immer den Inhalt von $ _POST Dump, um zu sehen, was Sie von der JavaScript-Formular Vorlage sind Empfangen print_r($_POST) verwenden. Das würde Ihnen eine Vorstellung über das, was Sie die Daten in PHP für den Zugriff zu tun bräuchten Sie benötigen.

Sie können diese Funktion in PHP verwenden, um Reverse serializeArray ().

<?php
function serializeToArray($data){
        foreach ($data as $d) {
            if( substr($d["name"], -1) == "]" ){
                $d["name"] = explode("[", str_replace("]", "", $d["name"]));
                switch (sizeof($d["name"])) {
                    case 2:
                        $a[$d["name"][0]][$d["name"][1]] = $d["value"];
                    break;

                    case 3:
                        $a[$d["name"][0]][$d["name"][1]][$d["name"][2]] = $d["value"];
                    break;

                    case 4:
                        $a[$d["name"][0]][$d["name"][1]][$d["name"][2]][$d["name"][3]] = $d["value"];
                    break;
                }
            }else{
                $a[$d["name"]] = $d["value"];
            } // if
        } // foreach

        return $a;
    }
?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top