ajaxurl non défini sur le frontal

23

J'essaie de créer un fichier Ajaxform sur le côté 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?

    
posée dread_cat_pirate 03.06.2015 - 09:26

2 réponses

39

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 souhaitez utiliser les appels AJAX en front-end, vous devez définir vous-même cette variable.

Pour ce faire, utilisez wp_localize_script .

Supposons que vos appels AJAX sont 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);
        }
    });
    
réponse donnée Krzysiek Dróżdż 03.06.2015 - 09:42
19

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 le ajaxurl pour la requête ajax.

    
réponse donnée R T 23.09.2015 - 09:28

Lire d'autres questions sur les étiquettes