Domanda

sto provando questo nuovo metodo che ho visto serializeArray().

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

Così mi vengono queste coppie di valori chiave, ma come faccio ad accedere con PHP?

Ho pensato che avevo bisogno di fare questo, ma non funzionerà:

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

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

Grazie, Richard

È stato utile?

Soluzione

Come suggerito Gumbo, è probabile che non l'elaborazione del valore di ritorno di json_decode .
Prova

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

Se $data non contiene i dati previsti, quindi var_dump($_POST); per vedere che cosa la chiamata Ajax ha fatto posto allo script. Potrebbe essere che si sta tentando di accedere al JSON dalla tasto sbagliato.

Modifica
In realtà, è necessario assicurarsi che si sta realmente inviando JSON, in primo luogo :)
La documentazione jQuery per lo stato serialize Il metodo .serializeArray () crea un JavaScript array di oggetti, pronto da codificare come una stringa JSON. Pronto essere codificato non è JSON. A quanto pare, non v'è alcuna funzione Object2JSON in jQuery quindi o utilizzare https: // GitHub .com / douglascrockford / JSON-js / BLOB / master / json2.js come un 3 ° lib festa o utilizzare http://api.jquery.com/serialize/ invece .

Altri suggerimenti

La struttura JSON restituito non è una stringa. È necessario utilizzare una libreria di plugin o di terze parti per "stringa i" esso. Vedere questo per maggiori informazioni:

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

Il PO potrebbe effettivamente ancora utilizzato serializeArray () invece di serializzare () apportando le seguenti modifiche:

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

sua possibile utilizzando la matrice serializzare e json_decode ()

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

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

i valori sono ricevuti come un array

ogni valore può essere recuperato utilizzando $ valore [0] [ 'valore'] ogni nome di componente HTML è dato da $ valore [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 ) ) 

Ho una situazione molto simile a questo e credo che Ty W ha la risposta corretta. Io includo un esempio del mio codice, nel caso in cui ci sono abbastanza differenze per cambiare il risultato, ma sembra come se si può semplicemente utilizzare i valori iscritti come si farebbe normalmente in PHP.

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

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

Questo è un esempio molto semplificato, ma penso che il punto chiave è che non si desidera utilizzare il metodo json_decode() come probabilmente produce in uscita indesiderati.

il javascript non cambia il modo in cui i valori vengono inviati lo fa? Non dovresti essere in grado di accedere ai valori tramite PHP come al solito attraverso $_POST['name_of_input_goes_here']

modifica: si può sempre scaricare il contenuto di $ _POST per vedere che cosa si sta ricevendo dalla presentazione modulo JavaScript utilizzando print_r($_POST). Che sarebbe darvi un'idea di quello che avresti bisogno di fare in PHP per accedere ai dati necessari.

È possibile utilizzare questa funzione in php per invertire 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;
    }
?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top