Question

Je suis en train de cette nouvelle méthode que je l'ai vu serializeArray().

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

Je reçois ces paires de valeurs clés, mais comment puis-je les accès avec PHP?

Je pensais que je devais le faire, mais ça ne marchera pas:

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

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

Merci, Richard

Était-ce utile?

La solution

Comme Gumbo a suggéré, vous traitez probablement pas de la valeur de retour de json_decode .
Essayez

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

Si $data ne contient pas les données attendues, var_dump($_POST); puis de voir ce que l'appel Ajax a fait la poste à votre script. Peut-être que vous essayez d'accéder à la JSON de la mauvaise touche.

EDIT En fait, vous devez vous assurer que vous envoyez vraiment JSON en premier lieu :)
Les docs jQuery pour l'état serialize La méthode .serializeArray () crée un JavaScript array d'objets, prêt à être encodées comme une chaîne JSON. Prêt à coder est pas JSON. Apparemment, il n'y a pas de fonction de Object2JSON jQuery donc soit utiliser https: // github .com / Douglas Crockford / JSON-js / blob / maître / json2.js comme 3ème partie lib ou utiliser http://api.jquery.com/serialize/ à la place.

Autres conseils

La structure JSON retournée est pas une chaîne. Vous devez utiliser une bibliothèque de plug-in ou une tierce partie à « stringify » il. Voir ce pour plus d'informations:

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

L'OP aurait effectivement encore utilisé serializeArray () au lieu de simplement la sérialisation () en apportant les modifications suivantes:

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

il est possible à l'aide de la matrice de sérialiser et json_decode ()

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

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

les valeurs sont reçues dans un tableau

chaque valeur peut être récupérée en utilisant la valeur de $ [0] [ 'value'] chaque nom de composant HTML est donnée comme valeur de $ [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 ) ) 

J'ai une situation très semblable à cela et je crois que Ty W a la bonne réponse. Je rajouterais un exemple de mon code, juste au cas où il y a suffisamment de différences pour changer le résultat, mais il semble que vous pouvez simplement utiliser les valeurs affichées comme vous le feriez normalement en php.

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

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

Ceci est un exemple très simplifié, mais je pense que le point essentiel est que vous ne voulez pas utiliser la méthode json_decode() car elle produit probablement sortie non désirée.

le javascript ne change pas la façon dont les valeurs sont postés il fait? Vous ne devriez pas être en mesure d'accéder aux valeurs via PHP comme d'habitude par $_POST['name_of_input_goes_here']

edit: vous pouvez toujours vider le contenu de $ _POST pour voir ce que vous recevez de la soumission du formulaire javascript en utilisant print_r($_POST). Cela vous donne une idée de ce que vous devez faire en PHP pour accéder aux données dont vous avez besoin.

Vous pouvez utiliser cette fonction en php pour inverser 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;
    }
?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top