如何将jQuery AJAX中的参数传递给PHP函数?

时间:2019-02-22 作者:Rollor

我有这个:

PHP:

add_action(\'wp_ajax_count_messages\', \'count_messages\');
function count_messages($projectid) {
    //some code
    wp_send_json_success($projectid);
}
JS公司:

var countData = {
    \'action\': \'count_messages\',
    \'projectid\': \'100\'
}
var myRequest =
    $.ajax({
        url: admin_ajax.ajax_url,
        type: \'post\',
        data: countData
        });
myRequest.done(function(data){ console.log(data); });
当我检查控制台时,我得到:

{success: true, data: ""}
我不知道发生了什么,为什么会得到一个空字符串?

2 个回复
最合适的回答,由SO网友:Antti Koskinen 整理而成

从jQuey发送到PHP的数据位于$_POST 变量所以你可以使用$_POST[\'projectid\'] 在PHP函数中获取数据。

SO网友:Tom J Nowell

您是否考虑过改用REST API端点?

e、 g.让我们注册我们的端点:

add_action( \'rest_api_init\', function () {
        register_rest_route( \'rollor/v1\', \'/count_messages/\', array(
                \'methods\' => \'GET\',
                \'callback\' => \'count_messages\'
        ) );
} );
然后实施:

function count_messages($request) {
    return $request[\'projectid\'];
}
现在您可以访问yoursite.com/wp-json/rollor/v1/count_messages?projectid=123

添加验证

我们甚至可以将其扩展为添加内置验证,并将项目ID放在URL中:

        register_rest_route( \'rollor/v1\', \'/count_messages/(?P<projectid>\\d+)\', array(
                \'methods\' => \'GET\',
                \'callback\' => \'count_messages\',
                \'args\' => array(
                    \'projectid\' => function($param,$request,$key) {
                        return is_numeric($param);
                    }
                )
        ) );
现在我们可以访问yoursite.com/wp-json/rollor/v1/count_messages/123. 它甚至会用通俗易懂的英语告诉我们是否搞错了。

最后:

var myRequest =
$.ajax({
    url: \'https://example.com/wp-json/rollor/v1/count_messages/\' + projectid,
});
myRequest.done(function(data){ console.log(data); });

相关推荐

使用WP API添加AJAX Load More函数

我想使用ajax为帖子类别创建一个加载更多功能。我跟踪了this article 关于如何继续,但在我添加注册端点的函数后,它会给我一个404错误,关于不存在的第二个页面。如果不使用插件在WP中实现这一点,代码中是否有任何错误或其他方式?(我是一名经验丰富的PHP开发人员,但我不经常使用wordpress,在某些方面对我来说都是新的)。功能。php <?php add_action(\'rest_api_init\', \'portfolio_ajax_api\');