Come ottenere i valori post dal serializeArray in PHP?
-
19-09-2019 - |
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
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;
}
?>