ajaxurl не визначено на передній частині


25

Я намагаюся створити 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?


Перевірте цей підручник. Це може вам допомогти. 1stwebdesigner.com/implement-ajax-wordpress-themes
Nilambar Sharma

Відповіді:


48

У бекенді є глобальна 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);
        }
    });

2
чи можу я користуватися wp_localize_scriptбез використання wp_enqueue_scritp?
dread_cat_pirate

1
Ви використовуєте ручку сценарію в wp_localize_script, тому вам доведеться використовувати wp_enqueue_script принаймні для одного зі своїх сценаріїв. Але ... Не використовувати wp_enqueue_script - це не дуже гарна ідея (ти ризикуєш деякими конфліктами та проблемами залежностей).
Krzysiek Dróżdż

У мене немає жодного зовнішнього скрипта для завантаження, я просто хочу використовувати ajaxurl для здійснення дзвінка Ajax. це не можливо?
RT

І куди ви поставите цей дзвінок AJAX? Як вбудований сценарій? Дуже погана ідея ...
Krzysiek Dróżdż

У мене є окрема форма, в якій я керую валідацією та під час подачі, ajax-дзвінок, щоб подати форму, звичайно, wordpress шляхом додавання гака все одно я придумав спосіб використання ajaxurl.
RT

33

безпосередньо використовувати 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.


1
Ця відповідь відповідає ajaxurlаналогічно використанню за замовчуванням. Що набагато краще, ніж прийнята відповідь.
Abel Melquiades Callejo

правда, але марно, якщо ви використовуєте його у файлі .js.
Жуль

1
@Jules ajaxurlдосі доступний у *.jsфайлі. Для цього вам може знадобитися оголосити ajaxurlзмінну на початку завантаження сторінки. Інша річ, яку слід врахувати, - це виклик *.jsвашого зовнішнього файлу. Зовнішній файл повинен бути названий ПІСЛЯ того, як ім'я ajaxurlбуло створено, і вказати правильне значення URL.
Abel Melquiades Callejo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.