it-swarm.com.ru

ajaxurl не определен на переднем конце

Я пытаюсь создать ajaxform на лицевой стороне. Я использую код

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

за что я получаю ошибку

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

При использовании аналогичного кода на админке работает бэкэнд. Какой URL я должен использовать для обработки запроса AJAX?

25
dread_cat_pirate

В бэкэнде есть глобальная переменная ajaxurl, определенная самим WordPress.

Эта переменная не создана WP во внешнем интерфейсе. Это означает, что если вы хотите использовать AJAX вызовы во внешнем интерфейсе, то вам нужно определить такую ​​переменную самостоятельно.

Хороший способ сделать это - использовать wp_localize_script.

Давайте предположим, что ваши вызовы AJAX находятся в файле my-ajax-script.js, а затем добавьте wp_localize_script для этого файла JS следующим образом:

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

После локализации вашего JS-файла вы можете использовать объект my_ajax_object в своем JS-файле:

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

чтобы использовать ajaxurl напрямую, добавьте в свой файл плагина:

add_action('wp_head', 'myplugin_ajaxurl');

function myplugin_ajaxurl() {

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

затем вы можете использовать ajaxurl для запроса ajax.

23
R T