Мой вывод вызова ajax всегда показывает 0, поскольку вывод не знает почему
В functions.php
у меня есть этот код
function get_data () {$ abc = '1'; $ result = $ wpdb-> get_results ("ВЫБРАТЬ * ОТ". $ wpdb-> options. "WHERE option_name LIKE '_transient_%'"); echo $ result; //возвращаем это значение, но все равно показывает 0 wp_die ();} add_action ('wp_ajax_nopriv_get_data', 'get_data'); add_action ('wp_ajax_get_data', 'get_data');
И мой вызов ajax находится в javascript
$ ('body'). on ("click", ".re-reset-btn", function (e) {var panel = $ ('# re-compare-bar'); $ .ajax ({type: "GET", dataType: "json", url: "/wp-admin/admin-ajax.php", data: {action: "get_data"}, success: function (response) {alert ("Ваш голос не может быть добавлен"); alert (response);}}); $ ("# re-compare-bar-tabs div"). remove ( ); $ ('. re-compare-icon-toggle .re-compare-notice'). text (0);});
Я делаю вызов ajax в wordpress без использования плагина, но не получаю то, что я передаю. Даже если я выведу $ abc, он все равно показывает 0.
В бэкэнде есть глобальная переменная 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);}});
Собственно, WordPress поставляется с удобной функцией для доступа к admin-ajax.
- В wp-admin вам не нужно ничего делать, библиотека js всегда загружается
-
В front-end вам нужно поставить в очередь скрипт
wp-util
, например это:add_action ('wp_enqueue_scripts', 'my_enqueue_function'); function my_enqueue_function () {//Вариант 1. Вручную поставить библиотеку wp-util в очередь. wp_enqueue_script ('wp-util'); //Вариант 2: Сделайте wp-util зависимостью вашего скрипта (обычно лучше). wp_enqueue_script ('my-script', 'my-script.js', ['wp-util']);}
Файл wp- Сценарий util содержит объект wp.ajax
, который вы можете использовать для выполнения запросов ajax:
wp.ajax.post (действие, данные) .done (okCallback) .fail (errCallback)
Ваш пример:
wp.ajax.post ("get_data", {}) .done (function (response) {alert ("Ваш голос не может быть добавлен"); alert (response);});
Конечно, вам все еще нужно для создания хуков wp_ajax_ *
в вашем PHP-скрипте.
add_action ('wp_ajax_nopriv_get_data', 'my_ajax_handler'); add_action ('wp_ajax_get_data' , 'my_ajax_handler'); function my_ajax_handler () {wp_send_json_success ('Это работает');}
Совет:
Для ответов Ajax WordPress предоставляет две функции:
wp_send_json_success ($ my_data)
и wp_send_json_error ($ my_data)
— обе функции возвращают объект JSON и d мгновенно завершить запрос (т.е. они exit;
)

-
Мой главный вопрос: допустим, я опубликовал публиковать данные, такие как электронное письмо от jquery ajax, тогда можно сказать
$ email = $ _POST ['email']
или WordPress имеет некоторые другие предопределенные методы — Karue Benson Karue 6 июня ’20 at 11:16
На самом деле WordPress поставляется с удобной функцией для доступа к admin-ajax.
- В wp-admin ничего делать не нужно, библиотека js всегда загружается
-
В front- end вам нужно поставить в очередь скрипт
wp-util
, например:add_action ('wp_enqueue_scripts', 'my_enqueue_function' ); function my_enqueue_function () {//Вариант 1. Вручную поставить библиотеку wp-util в очередь. wp_enqueue_script ('wp-util'); //Вариант 2: Сделайте wp-util зависимостью вашего скрипта (обычно лучше). wp_enqueue_script ('my-script', 'my-script.js', ['wp-util']);}
Файл wp- Сценарий util содержит объект wp.ajax
, который вы можете использовать для выполнения запросов ajax:
wp.ajax.post (действие, данные) .done (okCallback) .fail (errCallback)
Ваш пример:
wp.ajax.post ("get_data", {}). done (function (response) {alert ("Ваш голос не может быть добавлен"); alert (response);});
Конечно, вам все равно нужно создать wp_ajax_ *
в вашем PHP-скрипте.
add_action ('wp_ajax_nopriv_get_data', 'my_ajax_handler'); add_action ('wp_ajax_get_data', 'my_ajax_handler' ); function my_ajax_handler () {wp_send_json_success ('Это работает');}
Совет:
Для Ответы Ajax WordPress предоставляет две функции:
wp_send_json_success ($ my_data)
и wp_send_json_error ($ my_data)
— обе функции возвращают JSON и немедленно завершают запрос (т.е. они exit;
)
functions.php
wp_enqueue_script ('jquery'); function addCustomer () {global $ wpdb; $ name = $ _POST ['имя']; $ phone = $ _POST ['телефон']; $ email = $ _POST ['электронная почта']; $ адрес = $ _POST ['адрес']; if ($ wpdb-> insert ('customers', array ('name' => $ name, 'email' => $ email, 'address' => $ address, 'phone' => $ phone)) === false) {echo 'Ошибка'; } else {echo "Клиент". $ name. "'успешно добавлен, идентификатор строки:". $ wpdb-> insert_id; } die ();} add_action ('wp_ajax_addCustomer', 'addCustomer'); add_action ('wp_ajax_nopriv_addCustomer', 'addCustomer');
javascript
jQuery ('# newCustomerForm'). submit (ajaxSubmit); function ajaxSubmit () {var newCustomerForm = jQuery (this) .serialize (); jQuery.ajax ({type: "POST", url: "/wp-admin/admin-ajax.php", data: newCustomerForm, success: function (data) {jQuery ("# feedback"). html (данные); }}); return false;}

functions.php
wp_enqueue_script ('jquery' ); функция addCustomer () {global $ wpdb; $ name = $ _POST ['имя']; $ phone = $ _POST ['телефон']; $ email = $ _POST ['электронная почта']; $ адрес = $ _POST ['адрес']; if ($ wpdb-> insert ('customers', array ('name' => $ name, 'email' => $ email, 'address' => $ address, 'phone' => $ phone)) === false) {echo 'Ошибка'; } else {echo "Клиент". $ name. "'успешно добавлен, идентификатор строки:". $ wpdb-> insert_id; } die ();} add_action ('wp_ajax_addCustomer', 'addCustomer'); add_action ('wp_ajax_nopriv_addCustomer', 'addCustomer');
javascript
jQuery ('# newCustomerForm'). submit (ajaxSubmit); function ajaxSubmit () {var newCustomerForm = jQuery (this) .serialize (); jQuery.ajax ({тип: "POST", url: "/wp-admin/admin-ajax.php", data: newCustomerForm, success: function (data) {jQuery ("# feedback"). html (data); }}); return false;}
У меня была такая же проблема. Я был новичком в WordPress. Поэтому я объясняю здесь, чтобы каждый новый ученик мог понять, как ajax вызывает в WordPress.
Сначала создайте функцию в файле function.php, который находится в папке wp-content/theme/selected_theme. Здесь selected_theme может быть названием вашей темы.
В приведенном выше вопросе создается функция с именем get_data ()
;
function get_data () {echo "test"; wp_die (); //умереть(); } add_action ('wp_ajax_nopriv_get_data', 'get_data'); add_action ('wp_ajax_get_data', 'get_data');
в двух приведенных выше строках
- Метод add_action используется для реализации ловушки. Здесь я передаю два параметра, первый — это
wp_ajax_nopriv_get_data
. Здесь вы можете заменить get_data на свой выбор. а параметром раздела является get_data, который представляет собой имя функции, которую вы хотите вызвать. - Во втором add_action я передаю два параметра, первый — это
wp_ajax_get_data
. Здесь вы можете заменить get_data на свой выбор. а параметр раздела — get_data, который является именем функции, которую вы хотите вызвать.
Здесь wp_ajax_nopriv вызывает, если пользователь не вошел в систему, и wp_ajax вызывается, когда пользователь входит в систему. .
jQuery.ajax ({type: "post", dataType: "json", url: "/wp-admin/admin-ajax.php",//this - это файл wordpress ajax, который уже доступен в данных wordpress: {action: 'get_data'//это значение является первым параметром add_action, id: 4}, success: function (msg) {console.log (msg);}}) ;
У меня была такая же проблема. Я был новичком в WordPress. Поэтому я объясняю здесь, чтобы каждый новый ученик мог понять, как ajax вызывает в WordPress.
Сначала создайте функцию в файле function.php, который находится в папке wp-content/theme/selected_theme . Здесь selected_theme может быть названием вашей темы.
В приведенном выше вопросе создается функция с именем get_data ()
;
function get_data () {echo "test"; wp_die (); //умереть(); } add_action ('wp_ajax_nopriv_get_data', 'get_data'); add_action ('wp_ajax_get_data', 'get_data');
в двух приведенных выше строках
- Метод add_action используется для реализации ловушки. Здесь я передаю два параметра, первый — это
wp_ajax_nopriv_get_data
. Здесь вы можете заменить get_data на свой выбор. а параметром раздела является get_data, который является именем функции, которую вы хотите вызвать. - Во втором add_action я передаю два параметра, первый — это
wp_ajax_get_data
. Здесь вы можете заменить get_data на свой выбор. а параметр раздела — get_data, который является именем функции, которую вы хотите вызвать.
Здесь wp_ajax_nopriv вызывает, если пользователь не вошел в систему, и wp_ajax вызывается, когда пользователь вошел в систему.
jQuery. ajax ({type: "post", dataType: "json", url: "/wp-admin/admin-ajax.php",//это файл ajax wordpress, который уже доступен в данных wordpress: {action: 'get_data '//это значение является первым параметром add_action, id: 4}, success: function (msg) {console.log (msg);}});
Добавьте admin-ajax.php с помощью admin_url ('admin-ajax.php');
$ ('body'). on ("клик", ".re-reset-btn", function (e) {var panel = $ ('# re-compare-bar'); $ .ajax ({type: "POST", dataType: "json" , url: "", data: {action: "get_data"}, success: function (response) {alert ("Ваш голос не может быть добавлен" ); alert (ответ ); }}); $ ("# re-compare-bar-tabs div"). remove (); $ ('. повторно сравнить-значок-переключить. повторно-сравнить-уведомление'). текст (0); });

-
Этот код находится внутри файла javascript ……. поэтому он не работает php echo admin_url (‘admin-ajax.php’); ?> — smarttechy 22 апр. ’17 в 10:09
-
вы можете поместить свой код в файл footer.php перед php wp_footer (); ?>. — Шитал Маракана 22 апр. ’17 в 10:11
Добавьте admin-ajax.php с помощью admin_url ('admin-ajax .php ');
$ (' body '). on ("click", ".re- reset-btn ", function (e) {var panel = $ ('# re-compare-bar'); $ .ajax ({type:" POST ", dataType:" json ", url:" ", data: {action:" get_data "}, success: function (response) {alert (" Ваш голос не может быть добавлен "); alert (response);}} ); $ ("# re-compare-bar-tabs div"). remove (); $ ('. re-compare-icon-toggle .re-compare-notice'). текст (0); });
Если вы получаете 0
в ответе, это означает, что ваш вызов ajax работает правильно, но вы не определили $ wpdb как глобальную переменную в своей функции get_data. Проверьте журнал ошибок, вы должны увидеть там ошибку. Попробуйте:
function get_data () {global $ wpdb; $ abc = '1'; $ result = $ wpdb-> get_results ("ВЫБРАТЬ * ОТ". $ wpdb-> options. "WHERE option_name LIKE '_transient_%'"); echo $ result; //возвращаем это значение, но все равно показывает 0 wp_die ();}
Если в ответе вы получаете 0
, это означает, что ваш вызов ajax работает правильно, но , вы не определили $ wpdb как глобальную переменную в своей функции get_data. Проверьте журнал ошибок, вы должны увидеть там ошибку. Попробуйте:
function get_data () {global $ wpdb; $ abc = '1'; $ result = $ wpdb-> get_results ("ВЫБРАТЬ * ОТ". $ wpdb-> options. "WHERE option_name LIKE '_transient_%'"); echo $ result; //возвращаем это значение, но все равно показывает 0 wp_die ();}
Шаг 1: Добавьте файл ajax ‘wp_enqueue_script’ в файл функции, где вы должны добавить другие файлы ‘wp_enqueue_script’ или ‘wp_enqueue_style’
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')));
Шаг 2: Теперь вы необходимо создать функцию, на которую вы хотите получить ответ, используя ajaxe.g ниже
add_action ('wp_footer', 'add_ajaxex_in_footer'); function add_ajaxex_in_footer () {?> jQuery ('# sbmtbtn'). click (function () {jQuery.ajax ({type: "POST", url: my_ajax_object.ajax_url, data: {действие: 'my_special_ajax_call_enroll_cours'}, успех: функция (res) {console. журнал (res); }}); }); php}
Шаг 3: Теперь вам нужно создать функцию, в которой вы должны написать запрос,
add_action ('wp_ajax_my_special_ajax_call_enroll_cours', 'enroll_cours'); add_action ('wp_ajax_nopriv_my_special_ajax_call_enroll_cours', 'enroll_cours'); function enroll_cours () {echo "Здесь вы можете написать запрос или что-нибудь еще"; } exit;}
=> Если вы хотите запустить запрос ajax после кнопки onClick, просто передайте идентификатор кнопки
Шаг 1: Добавьте файл ajax ‘wp_enqueue_script’ в файл функции, где вы должны добавить другие файлы ‘wp_enqueue_script’ или ‘wp_enqueue_style’
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')));
Шаг 2: Теперь вы необходимо создать функцию, на которую вы хотите получить ответ, используя ajaxe.g ниже
add_action ('wp_footer', 'add_ajaxex_in_footer'); function add_ajaxex_in_footer () {?> jQuery ('# sbmtbtn'). click (function () {jQuery.ajax ({type: "POST", url: my_ajax_object.ajax_url, data: {action: 'my_special_ajax_call_enroll_cours'}, success: function (res) {console.log (res);}});}); php}
Шаг 3: Теперь вам нужно создать функцию, в которой вы должны написать запрос,
add_action ('wp_ajax_my_special_ajax_call_enroll_cours', 'enroll_cours'); add_action ('wp_ajax_nopriv_my_special_ajax_call_croll_my_special_ajax_call ); function enroll_cours () {echo "Здесь вы можете написать запрос или что-нибудь еще"; } exit;}
=> Если вы хотите запустить запрос ajax после кнопки onClick, просто передайте идентификатор кнопки
Простой пример Ajax WordPress · GitHub
php | |
функция example_ajax_enqueue () { | |
//Помещаем javascript в очередь на веб-интерфейсе. | |
wp_enqueue_script ( | |
‘example-ajax-script’, | |
get_template_directory_uri (). ‘/js/simple -ajax-example.js ‘, | |
array (‘ jquery ‘) | |
); | |
//wp_localize_script позволяет нам выводить путь ajax_url для использования нашим скриптом. | |
wp_localize_script ( | |
‘example- ajax-script ‘, | |
‘ example_ajax_obj ‘, | |
array ( | |
‘ajaxurl’ => admin_url (‘ admin-ajax.php ‘), | |
‘ nonce ‘=> wp_create_nonce (‘ ajax-nonce ‘) | |
) | |
); | |
} | |
add_action (‘wp_enqueue_scripts’, ‘example_ajax_enqueue’); |
jQuery (document) .ready (function ($) { | |
//Мы пройдем эту переменную в функцию PHP example_ajax_request | |
var fruit = ‘Banana’; | |
//Это делает запрос ajax | |
$ .ajax ({ | |
url: example_ajax_obj.ajaxurl, | |
data: { | |
‘action’: ‘example_ajax_request’, | |
‘fruit’: fruit, | |
‘nonce’: example_ajax_obj.nonce | |
}, | |
успех: функция (данные) { | |
//Th выводит результат запроса ajax | |
console.log (data); | |
}, | |
ошибка: функция (errorThrown) { | |
консоль. log (errorThrown); | |
} | |
}); | |
}); |
php | |
function example_ajax_request () { | |
$ nonce = $ _POST [‘nonce’]; | |
if (! wp_verify_nonce ($ nonce, ‘example-ajax-script’)) { | |
die (‘ Значение nonce не может быть проверено. ‘); | |
} | |
//$ _REQUEST содержит все данные отправлено через ajax | |
if (isset ($ _ REQUEST)) { | |
$ fruit = $ _REQUEST [‘ фрукт ‘]; | |
//Возьмем данные, которые были отправлены, и что-то с ними сделаем | |
if ($ fruit == ‘Banana’) { | |
$ fruit = ‘Apple’; | |
} | |
//Теперь вернем его в функцию javascript | |
//Все, что выведено, будет возвращено в ответе | |
echo $ fruit; | |
//Если вы отлаживаете, это может быть полезно чтобы увидеть, что было отправлено в $ _REQUEST | |
//print_r ($ _ REQUEST); | |
} | |
//Всегда умираем в функциях, повторяющих содержимое ajax | |
die (); | |
} | |
а dd_action (‘wp_ajax_example_ajax_request’, ‘example_ajax_request’); | |
//Если вы хотите также использовать функцию для незарегистрированных пользователей (например, в теме) | |
add_action (‘wp_ajax_nopriv_example_ajax_request’, ‘example_ajax_request’); |