web-dev-qa-db-fra.com

En utilisant AJAX avec des formulaires

J'essaie de valider et de soumettre un formulaire à l'aide de AJAX dans WordPress. Toutefois, la réponse que je reçois est 0. D'après le codex , cela semblerait indiquer que admin-ajax est incapable de trouver les fonctions que j'ai définies.

Qu'est-ce que je fais mal?

Code (simplifié à des fins de démonstration)

<script type="text/javascript">

jQuery(function()
{
    jQuery(document).on('click', '#test-button', function()
    {
        var name = jQuery("#name").val();
        var AdminAJAX = <?php echo json_encode(admin_url('admin-ajax.php')); ?>;

        var ajaxparams = {
            action: 'jp_ajax_request',
            name: name
            };

        jQuery.post( AdminAJAX, ajaxparams, function( response )
        {
            alert(response);
        });
    }
}
</script>

<?php
add_action( 'wp_ajax_jp_ajax_request', 'jp_ajax_process');
add_action( 'wp_ajax_nopriv_jp_ajax_request', 'jp_ajax_process');

function jp_ajax_process()
{
    echo 'ajax response';
    die();
}
?>

<form action="">
    <input type="text" id="name">
    <button id="test-button">Submit</button>
</form>
1
William

Votre add_action() appelle les gestionnaires AJAX trop tard.

Si vous ajoutez ces crochets plus tôt, la meilleure action est probablement wp_loaded:

add_action( 'wp_loaded', 'register_ajax_handlers' );

function register_ajax_handlers()
{
    add_action( 'wp_ajax_jp_ajax_request', 'jp_ajax_process');
    add_action( 'wp_ajax_nopriv_jp_ajax_request', 'jp_ajax_process');
}

Voir aussi: Déboguer AJAX .

Ce code doit être placé dans un plugin ou dans le functions.php de votre thème.

2
fuxia