Я пытаюсь создать 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?
plugin-development
theme-development
ajax
jquery
wp-enqueue-script
dread_cat_pirate
источник
источник
Ответы:
В бэкэнде есть глобальная
ajaxurl
переменная, определяемая самим WordPress.Эта переменная не создается WP в веб-интерфейсе. Это означает, что если вы хотите использовать вызовы AJAX во внешнем интерфейсе, то вам нужно определить такую переменную самостоятельно.
Хороший способ сделать это - использовать
wp_localize_script
.Давайте предположим, что ваши AJAX-вызовы находятся в
my-ajax-script.js
файле, а затем добавьте wp_localize_script для этого JS-файла следующим образом:После локализации вашего JS-файла вы можете использовать
my_ajax_object
объект в вашем JS-файле:источник
wp_localize_script
без необходимости использоватьwp_enqueue_scritp
?чтобы использовать ajaxurl напрямую, добавьте в свой файл плагина:
Затем вы можете использовать
ajaxurl
запрос ajax.источник
ajaxurl
аналогичен использованию по умолчанию. Что намного лучше, чем принятый ответ.ajaxurl
все еще доступен в*.js
файле. Для этого вам может потребоваться объявитьajaxurl
переменную в начале загрузки страницы. Еще одна вещь, которую следует учитывать, - это вызов*.js
вашего внешнего файла. Внешний файл должен называться ПОСЛЕajaxurl
был экземпляр и дать правильное значение URL.