我想打电话给/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]);
}
});
};
$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 (动作)
wp_ajax_nopriv_(动作)
现在,您将在 AJAX 请求中调用的文件是 site.tld/wp-admin/admin-ajax.php
。 你可以对它进行硬编码,但这不是最好的选择。 理想情况下,你应该把它存储在一个JavaScript变量中,WordPress有一个方便的函数来做到这一点。 将以下内容放在用于排队脚本/样式的回调函数中
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。