我正在尝试使用WordPress进行AJAX调用,但根本无法使用它。我看了一些其他的答案,它们必须有一些相关性,因为它显然是同一个问题,但在我的场景中;我不知道出了什么问题。
这是我在页面上包含的代码。
PHP是通过require包含的,并且肯定工作正常。 JavaScript也正确包含在内,因为它返回了一些东西(不是正确的东西)。
JS
jQuery(document).ready(function($) {
$('.button').on('click', function(e) {
e.preventDefault();
$.ajax({
url: MY_PLUGIN.ajax_url,
type: 'POST',
data: {
action: 'add_person',
data: 'john smith'
},
success: function(data) {
console.log(data);
}
});
});
});
PHP
function add_a_person() {
$data = array('abc' => 'xyz');
wp_send_json($data);
}
add_action('wp_ajax_add_person', 'add_a_person');
我知道目前我的PHP函数没有做任何事情,但我希望如果我能回复一个简单的单词,至少它已经联系起来了。
我只是不明白我在这里做错了什么。为什么页面标记(HTML)会返回给我,而不是我定义为要发送的数据?
答案 0 :(得分:0)
首先,您的函数名称和操作名称不匹配:
add_action('wp_ajax_add_person', 'add_a_person');
应该是:
add_action('wp_ajax_add_person', 'add_person');
并尝试使用以下内容添加前端未记录操作:
add_action('wp_ajax_nopriv_add_person', 'add_person');
此外,使用wordpress时ajax不使用return
但使用echo
function add_a_person() {
// Just return this to test for now
echo "hello";
}
那说我最近也被告知你应该考虑使用WP REST API,因为它更容易和更清洁
答案 1 :(得分:0)
我遇到了同样的问题,请参考我的解决方案和问题,
问题:CSS通过在每个页面中附加来为wp-admin发布列表模板写入,因此这个css代码随每个admin-ajax.php响应一起作为页面样式。
解决方案:删除这些样式并添加为admin enqueue脚本。
在你的情况下,可能会在页面中添加一些html或css。因此,请检查该方案并停用与此相关的任何插件并进行检查。
答案 2 :(得分:-1)
你需要回显值并退出,如果你需要json,函数wp_send_json()
将完成你正在寻找的东西。
function add_a_person() {
wp_send_json( array('message'=> "hello") );
}
或
function add_a_person() {
echo "hello";
die();
}