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

Foi útil?

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;
    }
?>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top