Зачем использовать admin-ajax.php и как это работает?
-
-
Следует отметить,что любой ответ будет говорить о том,почемуthemes/example/json.php следует считать серьезной уязвимостью безопасности.Of note, any answer would talk about why `themes/example/json.php` should be considered a major security vulnerability
- 2
- 2015-06-10
- Tom J Nowell
-
2 ответ
- голосов
-
- 2015-06-10
<цитата>1) Зачем использовать
admin-ajax.php
вместо кодирования вашегоjson в отдельном файл,напримерthemes/example/json.php
,и закодировать там свои данные?Использование
<цитата>admin-ajax.php
означает,что ядро WordPress загружено и доступно. Без этого вам нужно будет вручную загрузить нужные вам файлы,что является сложным процессом и может привести к сбоям,если вы не очень хорошо знаете ядро. И насколько хорошо вы работаете с безопасностью Javascript?2) Как работает
admin-ajax.php
? Я мало что понимаю из этого файл. Загружает ли он все функции,чтобы вы были готовы их использовать?- Он загружает ядро WordPress,что означает,что вы можете использовать такие вещи,как
$wpdb
и$WP_Query
. Это примерно до строки 25. - Он отправляет несколько заголовков - строки 37–41.
- Заголовок типа контента.
- Заголовок,указывающий браузерам не кэшировать результаты.
- Интересны заголовки,отправленные
send_nosniff_headers()
- и
nocache_headers()
.
- Срабатывает обработчик
admin_init
. - Основные действия определяются и регистрируются динамически - строки 46–73.
Они не будут зарегистрированы,если они не понадобятся - то есть,если
они запрашиваются через
$_GET
или$_POST
. - Срабатывает ловушка API "heartbeat" - строка 75
- Проверяется статус "авторизован" запрашивающего пользователя и срабатывает соответствующий административный крючок или крючок "без привилегий".
На мой взгляд,пункты №1 и №6 являются основными причинами использования AJAX API. У вас есть ядро WordPress,которое вам почти наверняка понадобится,и у вас такая же система безопасности входа в систему,как и в остальной части WordPress.
1) Why use
admin-ajax.php
instead of encoding your json in a separate file likethemes/example/json.php
and encode your data there?Using
admin-ajax.php
means that the WordPress Core is loaded and available. WIthout that, you would need to hand load the files you need, which is a complicated process and prone to failure if you don't know the Core very, very well. And, how good are you with Javascript security?2) How does
admin-ajax.php
work? I don't understand much from that file. Does it load all the functions so you are ready to use them?- It loads the WordPress Core, meaning you can use things like
$wpdb
and$WP_Query
. That is through about line 25. - It sends a few headers-- lines 37 - 41.
- A content type header
- A header to tell browsers not to cache the results
- The interesting headers are those sent by
send_nosniff_headers()
- and
nocache_headers()
.
- The
admin_init
hook fires. - Core actions are defined and registered dynamically-- lines 46 - 73.
These won't be registered unless they are needed-- that is, unless
they are requested via
$_GET
or$_POST
. - The "heartbeat" API hook fires-- line 75
- The "logged in" status of the requesting user is checked and the appropriate administrative or "no priviledge" hook is fired.
Items #1 and #6 are the primary reasons to use the AJAX API, in my opinion. You have the WordPress Core, which you almost certainly need, and you have the same login security system as with the rest of WordPress.
-
- 2015-06-10
admin-ajax.php
является частью AJAX API WordPress.,и да,он обрабатывает запросы как от внутреннего,так и от внешнего интерфейса. вот что я выяснил для вашего вопроса:2) Как работает admin-ajax.php?
для логики можно посетите здесь.
Предполагается,что вы уже знаете,как ставить JavaScript в очередь и т. д.
Часть JavaScript:
jQuery(document).ready(function($) { // We'll pass this variable to the PHP function example_ajax_request var fruit = 'Banana'; // This does the ajax request $.ajax({ url: ajaxurl, data: { 'action':'example_ajax_request', 'fruit' : fruit }, success:function(data) { // This outputs the result of the ajax request console.log(data); }, error: function(errorThrown){ console.log(errorThrown); } }); });
Часть PHP:
function example_ajax_request() { // The $_REQUEST contains all the data sent via ajax if ( isset($_REQUEST) ) { $fruit = $_REQUEST['fruit']; // Let's take the data that was sent and do something with it if ( $fruit == 'Banana' ) { $fruit = 'Apple'; } // Now we'll return it to the javascript function // Anything outputted will be returned in the response echo $fruit; // If you're debugging, it might be useful to see what was sent in the $_REQUEST // print_r($_REQUEST); } // Always die in functions echoing ajax content die(); } add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' ); // If you wanted to also use the function for non-logged in users (in a theme for example) add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );
1) Зачем использовать admin-ajax.php вместо того,чтобы кодировать свойjson в отдельном файл,напримерthemes/example/json.php,и закодировать там свои данные?
может оказаться полезным. admin- ajax.php и настраиваемый шаблон страницы для запросов Ajax
admin-ajax.php
is part of the WordPress AJAX API, and yes, it does handle requests from both backend and front. here what i figure-out for your question that is:2) How does admin-ajax.php work?
for the logic you can visit here.
This assumes you already know how to enqueue JavaScript, etc.
JavaScript Piece:
jQuery(document).ready(function($) { // We'll pass this variable to the PHP function example_ajax_request var fruit = 'Banana'; // This does the ajax request $.ajax({ url: ajaxurl, data: { 'action':'example_ajax_request', 'fruit' : fruit }, success:function(data) { // This outputs the result of the ajax request console.log(data); }, error: function(errorThrown){ console.log(errorThrown); } }); });
PHP Piece:
function example_ajax_request() { // The $_REQUEST contains all the data sent via ajax if ( isset($_REQUEST) ) { $fruit = $_REQUEST['fruit']; // Let's take the data that was sent and do something with it if ( $fruit == 'Banana' ) { $fruit = 'Apple'; } // Now we'll return it to the javascript function // Anything outputted will be returned in the response echo $fruit; // If you're debugging, it might be useful to see what was sent in the $_REQUEST // print_r($_REQUEST); } // Always die in functions echoing ajax content die(); } add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' ); // If you wanted to also use the function for non-logged in users (in a theme for example) add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );
1) Why use admin-ajax.php instead of encoding your json in a separate file like themes/example/json.php and encode your data there?
may be this helpful.admin-ajax.php vs Custom Page Template for Ajax Requests
-
Эй,не могли бы вы объяснить эти хуки действий 'wp_ajax_example_ajax_request' и 'wp_ajax_nopriv_example_ajax_request' Я нигде не нахожу объяснений.И что разрешает ajaxurl?благодаряHey, can you explain these action hooks 'wp_ajax_example_ajax_request' and 'wp_ajax_nopriv_example_ajax_request' I find no explanation anywhere. Also what does ajaxurl resolve to? Thanks
- 0
- 2020-04-13
- David Okwii
Мой вызов ajax для данныхjson работает нормально вот так functions.php:
javascript:
У меня 2 вопроса.
1) Зачем использовать admin-ajax.php вместо того,чтобы кодировать свойjson в отдельном файле,например
themes/example/json.php
,и кодировать там свои данные?2) Как работает admin-ajax.php?Я мало что понимаю из этого файла.Загружает ли он все функции,чтобы вы были готовы их использовать?
Спасибо!