web-dev-qa-db-fra.com

Création d'un objet associatif multi-niveaux à l'aide de AJAX

Je voudrais créer un objet associatif à plusieurs niveaux sur la méthode $.post à l'aide de WordPress, afin de rendre mon code plus propre. Le problème est que je ne sais pas comment faire en sorte que ces valeurs soient manipulées sur le back-end.

C'est ce que je voudrais faire dans le fichier my_query.js, qui contient et gère la demande AJAX.

$.post( MyAjax.ajaxurl, {
    action: 'my_action',
    someValue: {
        one: 'Some Value One',
        two: 'Some Value Two',
        three: 'Some Value Three',
        four: 'Some Value Four',
    }
} );

Et ceci est la solution actuelle, que je ne souhaite pas mettre en œuvre sur mon code.

$.post( MyAjax.ajaxurl, {
    action: 'my_action',
    someValueOne: 'Some Value One',
    someValueTwo: 'Some Value Two',
    someValueThree: 'Some Value Three',
    someValueFour: 'Some Value Four'
} );

La seule façon d'obtenir ces valeurs sur le back-end est d'utiliser la deuxième option et de le faire dans le fichier .php.

$someValue = array(
    'one'   => $_POST[ 'someValueOne' ],
    'two'   => $_POST[ 'someValueTwo' ],
    'three' => $_POST[ 'someValueThree' ],
    'four'  => $_POST[ 'someValueFour' ]
);

echo $someValue[ 'one' ];

wp_die();

Mais ... quel est le problème de toute façon?

Je NE SAIS PAS savoir comment accéder à l'objet de données AJAX mon fichier .php en utilisant le premier exemple (ce que j'aimerais), il ne fonctionne qu'en utilisant le second. Comment pourrais-je retourner l'objet someValue dans le fichier .php en utilisant le premier exemple AJAX Request ?

1
iszwnc

En fait, la solution que j'ai trouvée était très simple et n'exigeait pas grand chose. Pour une raison quelconque, je n'ai pas pu récupérer les données dans ma demande de fonction AJAXsur le back-end.

Code JavaScript

Comme vous pouvez le voir ci-dessous, j'ai défini la propriété someValue exactement comme je le voulais, très propre et jolie.

$.post( MyAjax.ajaxurl, {
    action: 'my_action',
    someValue: {
        one: 'Some Value One',
        two: 'Some Value Two',
        three: 'Some Value Three',
        four: 'Some Value Four'
    }
} );

Code PHP

J'ai dû oublier que je pouvais associer toutes les propriétés définies dans l'objet de données à un tableau /à l'intérieur de mon back-end fonction .

$someValue = array(
    'one'   => $_POST[ 'someValue' ][ 'one' ],
    'two'   => $_POST[ 'someValue' ][ 'two' ],
    'three' => $_POST[ 'someValue' ][ 'three' ],
    'four'  => $_POST[ 'someValue' ][ 'four' ]
);

wp_die();

Si vous n'êtes pas sûr du type de données que vous obtenez de la AJAX Request. Je vous recommande de faire ce que notre ami @ mmm m'a demandé, juste var_dump() ou print_r() le $_POST superglobal, alors vous verrez si vous obtenez réellement quelque chose.

0
iszwnc

Si vous voulez passer une valeur complexe, votre meilleur chemin est probablement de la jsonifier. Quelque chose comme

$.post( MyAjax.ajaxurl, {
    action: 'my_action',
    someValue: JSON.stringify({
        one: 'Some Value One',
        two: 'Some Value Two',
        three: 'Some Value Three',
        four: 'Some Value Four',
    })
} );

puis du côté serveur, vous décodez la valeur avec

$someValue = json_decode($_POST['someValue']);

À ce stade, $someValue devrait être le tableau que vous vouliez transmettre.

1
Mark Kaplun