ajaxurl no definido en el extremo delantero

23

Estoy intentando crear una forma ajax en la parte frontal. Estoy usando el código

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

para el que estoy recibiendo un error

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

Mientras se utiliza un código similar en el administrador de backend funciona. ¿Qué url debo usar para procesar la solicitud ajax?

    
pregunta dread_cat_pirate 03.06.2015 - 09:26

2 respuestas

39

En el backend hay una variable global ajaxurl definida por WordPress.

Esta variable no es creada por WP en el frontend. Esto significa que si desea utilizar las llamadas AJAX en el frontend, entonces debe definir dicha variable por sí mismo.

Una buena manera de hacer esto es usar wp_localize_script .

Supongamos que sus llamadas AJAX están en el archivo my-ajax-script.js , luego agregue wp_localize_script para este archivo JS de esta manera:

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' );

Después de localizar su archivo JS, puede usar el objeto my_ajax_object en su archivo JS:

jQuery.ajax(
    {
        type: "post",
        dataType: "json",
        url: my_ajax_object.ajax_url,
        data: formData,
        success: function(msg){
            console.log(msg);
        }
    });
    
respondido por el Krzysiek Dróżdż 03.06.2015 - 09:42
19

para usar ajaxurl directamente, en su archivo de complemento agregue esto:

add_action('wp_head', 'myplugin_ajaxurl');

function myplugin_ajaxurl() {

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

luego puede usar el ajaxurl para la solicitud de ajax.

    
respondido por el R T 23.09.2015 - 09:28

Lea otras preguntas en las etiquetas