【问题标题】:How to extract data from database in Home page wordpress with ajax?如何使用ajax从主页wordpress中的数据库中提取数据?
【发布时间】:2016-04-29 23:43:38
【问题描述】:

我想打电话给/home/***/public_html/subdomains/busuioc/wp-content/themes/scalia/json_gallery_data.php
json_gallery_data.php的内容是:

global $wpdb;
$programs = $wpdb->get_results("SELECT * FROM program_tv");
$tv=array();
foreach ( $programs as $program){
    $tv[]=$program->day;
}
echo json_encode($tv);

ajax 文件是:

jQuery(document).ready(function(){ 
     loadData();
});
var loadData=function(){
    jQuery.ajax({
        type:"POST",
        url: 'site.com/wp-content/themes/scalia/json_gallery_data.php'
    }).done(function(data){
        var videos=JSON.parse(data);
        for(var i in videos){
           alert(videos[i]);
        }
    });

};

【问题讨论】:

  • 将AJAX类型改为GET!
  • console.log(data) 看看是否需要JSON.parse?
  • GET site.com/wp-content/themes/scalia/json_gallery_data.php 500(内部服务器错误)
  • 我不知道该怎么办..

标签: php ajax database wordpress


【解决方案1】:

$wpdb 不会被定义,因为你绕过了 wordpress,你必须使用 wordpress 的 ajax api 才能访问它。

将您的代码块放入函数中,并将其放入主题的functions.php 文件中(如果您想将其保存在单独的文件中,请将其包含在functions.php 文件中)

function my_ajax_handler(){
    global $wpdb;
    $programs = $wpdb->get_results("SELECT * FROM program_tv");
    $tv=array();
    foreach ( $programs as $program) 
    {
        $tv[]=$program->day;
    }
    echo json_encode($tv);
    wp_die();
}

之后你必须用 wordpress 的 ajax api“注册”它,然后你就这样做

add_action( 'wp_ajax_call_my_ajax_handler', 'my_ajax_handler' );
add_action( 'wp_ajax_nopriv_call_my_ajax_handler', 'my_ajax_handler' );

wp ajax (action)

wp_ajax_nopriv_(action)

现在,您要在 ajax 请求中调用的文件是 site.tld/wp-admin/admin-ajax.php。您可以对其进行硬编码,但这不是最好的做法。理想情况下,您应该将其存储在 javascript 变量中,而 wordpress 有一个方便的功能可以做到这一点。将以下内容放入您正在使用的回调函数中enqueue your scripts/styles

wp_enqueue_script( 'my-ajax-script', get_stylesheet_directory_uri() . '/path/to/script.js', array('jquery') );
wp_localize_script( 'my-ajax-script', 'my_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );

wp_localize_script

现在您所要做的就是修改您的 ajax 调用以包含我们之前注册的 ajax 触发器,

jQuery.ajax({
    type:"POST",
    url: my_ajax_object.ajax_url,
    data: { 'action': 'call_my_ajax_handler' }
})

注意call_my_ajax_handler 与我们之前“注册”的东西是一样的。

假设没有任何错误,您应该会看到预期的结果。

  • 没有代码经过测试。

同时查看AJAX in Plugins codex 条目。

【讨论】:

  • 肯定的 :) 看看check_ajax_referer,尤其是如果你打算做管理方面的事情。
猜你喜欢
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多