Pregunta

Estoy tratando este nuevo método que he visto serializeArray().

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

Así que tengo estos pares de valores clave, pero ¿cómo accedo a ellas con PHP?

pensé que tenía que hacer esto, pero no va a trabajar:

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

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

Gracias, Richard

¿Fue útil?

Solución

Al igual que Gumbo sugirió, es probable que no procesa el valor de retorno de json_decode .
Trate

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

Si $data no contiene los datos esperados, entonces var_dump($_POST); para ver lo que hizo la llamada Ajax poste a su guión. Podría ser que está intentando acceder al JSON de la tecla equivocada.

Editar
En realidad, usted debe asegurarse de que usted está realmente enviando JSON en el primer lugar :)
La documentación de jQuery para serializar el estado El método .serializeArray () crea un JavaScript array de objetos, listo para ser codificado como una cadena JSON. Listo a codificar no es JSON. Al parecer, no hay ninguna función Object2JSON en jQuery así que o usar https: // github .com / douglascrockford / JSON-js / blob / master / json2.js como una tercera parte o lib utilizan http://api.jquery.com/serialize/ lugar.

Otros consejos

La estructura JSON devuelto no es una cadena. Se debe utilizar una biblioteca de complementos o de terceros para "stringify" la misma. Ver este para obtener más información:

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

El PO podría haber utilizado en realidad todavía serializeArray () en lugar de sólo serializar () al hacer los siguientes cambios:

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

su posible mediante el uso de la matriz serialize y json_decode ()

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

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

los valores son recibidas como una matriz

cada valor puede ser recuperada utilizando el valor $ [0] [ 'valor'] cada nombre de componente html se da como valor $ [0] [ 'nombre']

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

Tengo una situación muy similar a este y creo que Ty W tiene la respuesta correcta. Voy a incluir un ejemplo de mi código, por si acaso existen suficientes diferencias para cambiar el resultado, pero parece como si sólo puede utilizar los valores publicados como lo haría normalmente en php.

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

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

Este es un ejemplo muy simplificado, pero creo que el punto clave es que usted no desea utilizar el método json_decode() ya que probablemente produce una salida no deseada.

el javascript no cambia la forma en que los valores publicados consiguen lo hace? ¿No debería ser capaz de acceder a los valores a través de PHP como de costumbre a través $_POST['name_of_input_goes_here']

editar: siempre se puede volcar el contenido de $ _POST para ver lo que está recibiendo desde el envío del formulario usando javascript print_r($_POST). Eso le daría una idea acerca de lo que se necesita hacer en PHP para acceder a los datos que necesita.

Puede utilizar esta función en php para revertir 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top