我有错误请求 400 以及functions.php 中的ajax 对象本地化代码:
get_template_part('inc/ajax_functions');
function enqueue_theme_assets(){
wp_enqueue_script('ajax_functions', WDD_JS . 'ajax_functions.js', [] , filemtime(WDD_JS_PATH . 'ajax_functions.js'));
wp_localize_script('ajax_functions', 'WDD_ajax_object', [
'WDD_ajax_url' => admin_url('admin-ajax.php'),
'WDD_ajax_nonce' => wp_create_nonce('WDD_ajax_nonce')
]
);
}
add_action('wp_enqueue_scripts', 'enqueue_theme_assets');
这是ajax_functions.js中的javascrit函数:
jQuery.noConflict();
jQuery(document).ready(function ($) {
const data = {
action: 'get_branches',
security: WDD_ajax_object.WDD_ajax_nonce
};
console.log(WDD_ajax_object.WDD_ajax_url);
jQuery.ajax({
url: WDD_ajax_object.WDD_ajax_url,
type: 'POST',
data: data,
processData: false,
contentType: false,
success: function (response) {
if (response.success === false) {
console.log('Request failed.' + response.data.error);
} else {
console.log(response.data);
}
},
error: function (xhr, status, error) {
}
});
});
这是 inc/ajax_functions.php 中的 php 函数:
function get_branches_callback()
{
if (!check_ajax_referer('WDD_ajax_nonce', 'security', false)) {
wp_send_json_error(array('error' => 'Invalid security token.'));
}
die();
}
add_action('wp_ajax_get_branches', 'get_branches_callback');
add_action( 'wp_ajax_nopriv_get_branches_callback', 'get_branches_callback' );
这是ajax请求中数据对象的控制台日志:
{action: 'get_branches', security: 'eefbd1e431'}
因此ajax对象已经创建并且ajax处理函数存在于全局$wp_filter中, 但呼叫从未到达该功能任何人都可以帮助我解决这个问题吗
我认为问题在于对非私人用户使用了不正确的操作名称。这是一个更正的示例:
function get_branches_callback() {
if ( ! check_ajax_referer( 'WDD_ajax_nonce', 'security', false ) ) {
wp_send_json_error( array( 'error' => 'Invalid security token.' ) );
}
die();
}
add_action( 'wp_ajax_get_branches', 'get_branches_callback' );
add_action( 'wp_ajax_nopriv_get_branches', 'get_branches_callback' );