web-dev-qa-db-fra.com

ajaxurl non défini à l'avant

J'essaie de créer un ajaxform sur la face avant. J'utilise le code

    jQuery.ajax(
        {
            type: "post",
            dataType: "json",
            url: ajaxurl,
            data: formData,
            success: function(msg){
                console.log(msg);
            }
        });

pour lequel je reçois une erreur

Uncaught ReferenceError: ajaxurl is not definedworklorAjaxBookForm @ 
?page_id=2:291onclick @ ?page_id=2:202

Tout en utilisant un code similaire sur le backend admin fonctionne. Quelle URL dois-je utiliser pour traiter la demande ajax?

25
dread_cat_pirate

Dans le backend, il existe une variable globale ajaxurl définie par WordPress lui-même.

Cette variable n'est pas créée par WP dans le frontal. Cela signifie que si vous voulez utiliser AJAX appels en front-end, vous devez alors définir vous-même cette variable.

Une bonne façon de faire est d’utiliser wp_localize_script.

Supposons que vos appels AJAX se trouvent dans le fichier my-ajax-script.js, puis ajoutez wp_localize_script pour ce fichier JS comme suit:

function my_enqueue() {

    wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/js/my-ajax-script.js', array('jquery') );

    wp_localize_script( 'ajax-script', 'my_ajax_object',
            array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue' );

Après avoir localisé votre fichier JS, vous pouvez utiliser l’objet my_ajax_object dans votre fichier JS:

jQuery.ajax(
    {
        type: "post",
        dataType: "json",
        url: my_ajax_object.ajax_url,
        data: formData,
        success: function(msg){
            console.log(msg);
        }
    });
46

pour utiliser ajaxurl directement, dans votre fichier de plugin, ajoutez ceci:

add_action('wp_head', 'myplugin_ajaxurl');

function myplugin_ajaxurl() {

   echo '<script type="text/javascript">
           var ajaxurl = "' . admin_url('admin-ajax.php') . '";
         </script>';
}

vous pouvez ensuite utiliser la variable ajaxurl pour la demande ajax.

23
R T