Como obter os valores POST serializeArray em PHP?
-
19-09-2019 - |
Pergunta
Eu estou tentando esse novo método que eu vi serializeArray()
.
//with ajax
var data = $("#form :input").serializeArray();
post_var = {'action': 'process', 'data': data };
$.ajax({.....etc
Então, eu recebo esses pares de valores-chave, mas como faço para acessá-los com PHP?
Eu pensei que eu precisava fazer isso, mas não vai funcionar:
// in PHP script
$data = json_decode($_POST['data'], true);
var_dump($data);// will return NULL?
Obrigado, Richard
Solução
Como Gumbo sugerido, é provável que você não está processando o valor de retorno json_decode .
Tentar
$data = json_decode($_POST['data'], true);
var_dump($data);
Se $data
não contém os dados esperados, então var_dump($_POST);
para ver o que a chamada Ajax fez post para o seu script. Pode ser que você está tentando acessar o JSON a partir da chave errada.
Editar
Na verdade, você deve se certificar de que você está realmente enviando JSON, em primeiro lugar :)
Os docs jQuery para o estado serialize O .serializeArray () método cria um JavaScript array de objetos, pronto para ser codificado como uma string JSON. Pronto para ser codificado não é JSON. Aparentemente, não há nenhuma função Object2JSON em jQuery por isso ou usar https: // github .com / Douglas Crockford / JSON-js / blob / master / json2.js como 3 lib partido ou uso http://api.jquery.com/serialize/ .
Outras dicas
A estrutura JSON retornado não é uma string. Você deve usar um plugin ou biblioteca de terceiros para "stringify-lo". Veja este para mais informações:
http://www.tutorialspoint.com/jquery/ajax-serializearray.htm
O OP poderia ter realmente usado ainda serializeArray () em vez de apenas serialize (), fazendo as seguintes alterações:
//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
a sua possível usando a matriz serializar e json_decode ()
// js
var dats = JSON.stringify($(this).serializeArray());
data: { values : dats } // ajax call
//PHP
$value = (json_decode(stripslashes($_REQUEST['values']), true));
os valores são recebidas como uma matriz
cada valor pode ser recuperada usando $ value [0] [ 'valor'] o nome de cada componente html é dado como $ value [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 ) )
Eu tenho uma situação muito semelhante a esta e acredito que Ty W tem a resposta correta. Vou incluir um exemplo do meu código, apenas no caso de existirem diferenças suficientes para mudar o resultado, mas parece que você pode apenas usar os valores lançados como faria normalmente em php.
// Javascript
$('#form-name').submit(function(evt){
var data = $(this).serializeArray();
$.ajax({ ...etc...
// PHP
echo $_POST['fieldName'];
Este é um exemplo muito simplificado, mas eu acho que o ponto chave é que você não quer usar o método json_decode()
como provavelmente produz uma saída indesejada.
o javascript não mudar a maneira que os valores postados não é? você não deve ser capaz de acessar os valores via PHP, como de costume através $_POST['name_of_input_goes_here']
edit: você sempre pode despejar o conteúdo de $ _POST para ver o que você está recebendo a partir do envio do formulário javascript usando print_r($_POST)
. Isso iria dar-lhe alguma idéia sobre o que você precisa fazer em PHP para acessar os dados que você precisa.
Você pode usar esta função em php para reverter 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;
}
?>