Basic Wordpress AJAX Call

时间:2017-08-18 作者:AnchovyLegend

我有一个新的WP安装,为了保持简单,我目前在我的functions.php:

function getFruits() {
    return json_encode( [\'fruits\' => [\'apples\', \'pears\']]);
} 

function my_enqueue() {    
    wp_enqueue_script( \'ajax-script\', get_template_directory_uri() . \'/js/my-ajax-script.js\', array(\'jquery\') );

    wp_localize_script( \'ajax-script\', \'my_ajax_object\',
        array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );
}
add_action( \'wp_enqueue_scripts\', \'my_enqueue\' );
现在,我的目标是使用JQuery/JavaScript对我的wordpress端点进行AJAX调用,获取fruits json对象,并在呈现登录页时简单地打印它。

这就是我所尝试的:

twentyseventeen\\js\\my-ajax-script.js:

$(document).ready(function() {
    $.ajax(
        {
            type: "get",
            data : {
                action: \'getFruits\'
            },
            dataType: "json",
            url: my_ajax_object.ajax_url,
            success: function(msg){
                console.log(msg); //output fruits to console
            }
        });
});
目前,我收到一个JQuery未定义错误,尽管它似乎已排队。其次,我甚至不确定我是否正确实现了这一点,因为我以前从未使用过WP-AJAX。所以现在,我的目标只是让一个基本的例子起作用。我非常感谢您对如何实现这一目标的任何建议。

非常感谢。

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

WordPress AJAX使用动作连接jQueryaction 使用传统的WordPress操作。看看example WordPress provides in their docs. 有两个挂钩:

add_action( "wp_ajax_{$jquery_action_string}", "callback_function_name" );
以上内容仅适用于经过身份验证(登录)的用户。对于未登录的用户,我们使用nopriv:

add_action( "wp_ajax_nopriv_{$jquery_action_string}", "callback_function_name" );
因此,在我们的案例中,我们将同时使用这两种方法:

function return_fruits() {
    echo json_encode( [\'fruits\' => [\'apples\', \'pears\']]);
    exit();
}
add_action( \'wp_ajax_getFruits\', \'return_fruits\' );
add_action( \'wp_ajax_nopriv_getFruits\', \'return_fruits\' );
注意,我更改了回调函数名称,以确定ajax操作和回调名称不需要相同。另外请注意,您可能希望echo 此数据而不是返回它。

SO网友:Jitender Singh

您必须使用ajax操作挂钩来执行jquery操作。

对于登录用户:

add_action(\'wp_ajax_getFruits\', \'getFruits);
对于未登录用户:

add_action(\'wp_ajax_nopriv_getFruits\', \'getFruits\');

function get_fruits(){
$response = array(\'Fruits\'=> [\'banana\', \'apple\']);
//use this function and make a response then send the response
wp_send_json_success(array(\'response\'=>$response));
// by using wp_send_json_success() you don\'t need to exit and parse response
}

结束

相关推荐

如何使用AJAX从数据库显示并在WordPress插件中加载更多内容

我开发了一个插件。它会自动在数据库中创建视频URL。该表由id、标题、URL和Thurl组成。我们可以使用wp管理面板的表单将内容发送到数据库(如果pk视频)。我想从数据库中检索行并显示它们。首先,当页面加载时,它应该只显示3个URL,当单击“加载更多”时,它应该显示3个以上,以此类推。基本上,我需要知道如何在WordPress中实现ajax。http://demos.codexworld.com/load-more-data-using-jquery-ajax-php-from-database/Wor