WordPress AJAX - 返回整个HTML标记作为响应

时间:2017-06-23 20:33:32

标签: php ajax wordpress

我正在尝试使用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)会返回给我,而不是我定义为要发送的数据?

3 个答案:

答案 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();
}