Каков предпочтительный способ написания плагинов с поддержкой AJAX?

Мне интересно, какой предпочтительный метод для работы с вызовами AJAX. Следует ли использовать один и тот же файл php-файла плагина для обработки POST или отдельного? Что является более чистым или безопасным?

48 голосов | спросил James 13 FebruaryEurope/MoscowbSun, 13 Feb 2011 04:32:12 +0300000000amSun, 13 Feb 2011 04:32:12 +030011 2011, 04:32:12

1 ответ


47

«безопаснее и чище» будет использовать admin-ajax.php, который поставляется с wordpress и wp_ajax, чтобы вызвать функцию обработки из вашего файла плагина и использовать wp-nonce для проверки целостность вызова.

, например:

ваш вызов ajax JQuery будет

<script type = "text /javascript">
jQuery (document) .ready (function ($) {

    var data = {
        действие: «ACTION_NAME»,
            Что угодно: '1234',
            _ajax_nonce: '<? php echo wp_create_nonce (' my_ajax_nonce '); ? >»

    };

    //поскольку 2.8 ajaxurl всегда определяется в заголовке admin и указывает на admin-ajax.php
    //Если вам это нужно на открытой странице, раскомментируйте следующую строку:
    //var ajaxurl = '<? php echo admin_url (' admin-ajax.php '); ? > ';
    jQuery.post (ajaxurl, data, function (response) {
        alert ('Получил это от сервера:' + response);
    });
});
& Lt; /сценарий >

в вашем файле плагина добавьте

//если вы хотите, чтобы только зарегистрированные пользователи могли получить доступ к этой функции, используйте этот крючок
add_action ('wp_ajax_ACTION_NAME', 'my_AJAX_processing_function');

//если вы хотите, чтобы ни один пользователь не имел доступа к этой функции, используйте этот крючок
add_action ('wp_ajax_nopriv_ACTION_NAME', 'my_AJAX_processing_function');

* если вы хотите, чтобы пользователи и гости регистрировались в вашей функции с помощью ajax, добавьте оба крючка. * ACTION_NAME должен соответствовать значению действия в вашем POST-сообщении ajax.

, то в вашей функции просто убедитесь, что запрос пришел из действительного источника

my_AJAX_processing_function () {
   check_ajax_referer ( 'my_ajax_nonce');
   //Делаем вещи здесь
}

Надеюсь, что это поможет

ответил Bainternet 13 FebruaryEurope/MoscowbSun, 13 Feb 2011 05:14:06 +0300000000amSun, 13 Feb 2011 05:14:06 +030011 2011, 05:14:06

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132