问题描述
我想知道处理 AJAX 调用的首选方法是什么。应该使用相同的插件 php 文件来处理 POST 还是单独一个?哪个更干净或更安全?
最佳解决方案
「更安全,更干净」 的方式是使用 wordpress 和 wp_ajax
钩子中的 admin-ajax.php 从您的插件文件中调用处理函数,并使用 wp-nonce 来检查调用的完整性。
例如:
你的 ajax JQuery 调用将是
<script type="text/javascript" >
jQuery(document).ready(function($) {
var data = {
action: 'ACTION_NAME',
Whatever: '1234',
_ajax_nonce: '<?php echo wp_create_nonce( 'my_ajax_nonce' ); ?>'
};
// since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
// If you need it on a public facing page, uncomment the following line:
// var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
jQuery.post(ajaxurl, data, function(response) {
alert('Got this from the server: ' + response);
});
});
</script>
在你的插件文件中添加
//if you want only logged in users to access this function use this hook
add_action('wp_ajax_ACTION_NAME', 'my_AJAX_processing_function');
//if you want none logged in users to access this function use this hook
add_action('wp_ajax_nopriv_ACTION_NAME', 'my_AJAX_processing_function');
*如果你想登录的用户和访客通过 ajax 访问你的函数,添加两个钩子。 * ACTION_NAME 必须与您的 ajax POST 中的动作值相匹配。
那么在你的函数中只要确保请求来自有效的来源
function my_AJAX_processing_function(){
check_ajax_referer('my_ajax_nonce');
//do stuff here
}
希望这可以帮助
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。