我有一个新的WP安装,为了保持简单,我目前在我的functions.php
:
function getFruits() {
return json_encode( [\'fruits\' => [\'apples\', \'pears\']]);
}
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\' );
现在,我的目标是使用JQuery/JavaScript对我的wordpress端点进行AJAX调用,获取fruits json对象,并在呈现登录页时简单地打印它。
这就是我所尝试的:
twentyseventeen\\js\\my-ajax-script.js
:
$(document).ready(function() {
$.ajax(
{
type: "get",
data : {
action: \'getFruits\'
},
dataType: "json",
url: my_ajax_object.ajax_url,
success: function(msg){
console.log(msg); //output fruits to console
}
});
});
目前,我收到一个JQuery未定义错误,尽管它似乎已排队。其次,我甚至不确定我是否正确实现了这一点,因为我以前从未使用过WP-AJAX。所以现在,我的目标只是让一个基本的例子起作用。我非常感谢您对如何实现这一目标的任何建议。
非常感谢。
最合适的回答,由SO网友:Howdy_McGee 整理而成
WordPress AJAX使用动作连接jQueryaction
使用传统的WordPress操作。看看example WordPress provides in their docs. 有两个挂钩:
add_action( "wp_ajax_{$jquery_action_string}", "callback_function_name" );
以上内容仅适用于经过身份验证(登录)的用户。对于未登录的用户,我们使用
nopriv
:
add_action( "wp_ajax_nopriv_{$jquery_action_string}", "callback_function_name" );
因此,在我们的案例中,我们将同时使用这两种方法:
function return_fruits() {
echo json_encode( [\'fruits\' => [\'apples\', \'pears\']]);
exit();
}
add_action( \'wp_ajax_getFruits\', \'return_fruits\' );
add_action( \'wp_ajax_nopriv_getFruits\', \'return_fruits\' );
注意,我更改了回调函数名称,以确定ajax操作和回调名称不需要相同。另外请注意,您可能希望
echo 此数据而不是返回它。