因此,我遵循了一个非常基础的教程,只是为了弄清楚WordPress中AJAX调用的工作方式。这是所有相关的代码位:
在functions.php
add_action( 'admin_enqueue_scripts', 'my_enqueue' );
function my_enqueue() {
wp_enqueue_script( 'ajax-script', get_template_directory_uri() .'/js/my_query.js', array('jquery') );
// in JavaScript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
wp_localize_script( 'ajax-script', 'ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );
}
在my_query.js
jQuery(document).ready(function($) {
console.log('myquery');
var data = {
'action': 'my_action',
'whatever': ajax_object.we_value // We pass php values differently!
};
// We can also pass the url value separately from ajaxurl for front end AJAX implementations
jQuery.post(ajax_object.ajax_url, data, function(response) {
alert('Got this from the server: ' + response);
});
});
以及admin-ajax.php
add_action( 'wp_ajax_my_action', 'my_action' );
function my_action() {
global $wpdb;
$whatever = intval( $_POST['whatever'] );
$whatever += 10;
echo $whatever;
wp_die();
}
这涵盖了教程中的所有要点,但是加载管理页面时得到的是这个400错误,而我应该会收到警报,对吗?
任何想法都会得到真正的赞赏,我的智慧就此终结。
谢谢。
答案 0 :(得分:2)
您似乎已在admin-ajax.php
的末尾添加了自定义代码。这不是正确的方法,不是。通常,您永远不要编辑核心/管理员WordPress文件,因为更新WordPress时,它将被覆盖(除其他原因外)。
即使忽略它,也不起作用的原因是admin-ajax.php
仅在实际请求时才执行,因此您的回调将注册得太晚。您应该在主题的functions.php
或插件中添加add_action和相关的回调,以便您的操作将在适当的时候被注册。