gpt4 book ai didi

ajax - 在wordpress中使用ajax返回JSON数据

转载 作者:行者123 更新时间:2023-12-04 18:09:31 27 4
gpt4 key购买 nike

好的,这是一个相当长的问题。我对 AJAX 相当陌生,尤其是在 WordPress 的上下文中使用它,但我一直在关注一些在线教程,我想我快到了。

我将粘贴到目前为止的内容并解释我的想法。

好的,开始,JS。

jQuery(document).ready(function(){
jQuery('.gadgets-menu').mouseenter(function(){

doAjaxRequest();
});
});

鼠标进入 .gadgets-menu 并触发请求,使用 mouseenter 使其触发一次。

请求本身。
function doAjaxRequest(){
// here is where the request will happen
jQuery.ajax({
url: 'http://www.mysite.com/wp-admin/admin-ajax.php',
data:{
'action':'do_ajax',
'fn':'get_latest_posts',
'count':5
},
dataType: 'JSON',
success:function(data){
//Here is what I don't know what to do.

},
error: function(errorThrown){
alert('error');
console.log(errorThrown);
}


});

}

现在是php函数。
add_action('wp_ajax_nopriv_do_ajax', 'our_ajax_function');
add_action('wp_ajax_do_ajax', 'our_ajax_function');
function our_ajax_function(){


switch($_REQUEST['fn']){
case 'get_latest_posts':
$output = ajax_get_latest_posts($_REQUEST['count']);
break;
default:
$output = 'No function specified, check your jQuery.ajax() call';
break;

}


$output=json_encode($output);
if(is_array($output)){
print_r($output);
}
else{
echo $output;
}
die;
}

和 ajax_get_latest_posts 函数
function ajax_get_latest_posts($count){
$posts = get_posts('numberposts='.'&category=20'.$count);

return $posts;
}

所以,如果我做对了,输出应该是 $posts = get_posts('numberposts='.'&category=20'.$count); IE。职位数 (5),来自第 20 类。
我现在不知道该怎么办,如何获得标题和缩略图?

对不起,如果这是愚蠢的,我只是在这里摸索。

修改php
add_action('wp_ajax_nopriv_do_ajax', 'our_ajax_function');
add_action('wp_ajax_do_ajax', 'our_ajax_function');
function our_ajax_function(){


$output = ajax_get_latest_posts($_REQUEST['count']); // or $_GET['count']
if($output) {
echo json_encode(array('success' => true, 'result' => $output));
}
else {
wp_send_json_error(); // {"success":false}
// Similar to, echo json_encode(array("success" => false));
// or you can use, something like -
// echo json_encode(array('success' => false, 'message' => 'Not found!'));
}

$output=json_encode($output);
if(is_array($output)){
print_r($output);
}
else{
echo $output;
}
die;
}


function ajax_get_latest_posts($count)
{
$args = array( 'numberposts' => $count, 'order' => 'DESC','category' => 20 );
$post = wp_get_recent_posts( $args );
if( count($post) ) {
return $post;
}
return false;
}

这不起作用。
jQuery(document).ready(function(){
jQuery('.gadgets-menu').mouseenter(function(){

doAjaxRequest();
});
});
function doAjaxRequest(){
// here is where the request will happen
jQuery.ajax({
url: 'http://localhost:8888/wp-admin/admin-ajax.php',
data:{
'action':'do_ajax',
'fn':'get_latest_posts',
'count':5
},
dataType: 'JSON',
success:function(data){
if(data.success) {
alert("It works");


}
else {
// alert(data.message); // or whatever...
}
}


});

}

不显示警报。

最佳答案

在您的代码中 get_posts('numberposts='.'&category=20'.$count);是错误的,但您可以使用 wp_get_recent_posts函数代替(尽管它使用 get_posts 反正),例如

function ajax_get_latest_posts($count)
{
$args = array( 'numberposts' => $count, 'order' => 'DESC','category' => 20 );
$post = wp_get_recent_posts( $args );
if( count($post) ) {
return $post;
}
return false;
}

然后在您的 our_ajax-function您可以使用
    $output = ajax_get_latest_posts($_REQUEST['count']); // or $_GET['count']
if($output) {
echo json_encode(array('success' => true, 'result' => $output));
}
else {
wp_send_json_error(); // {"success":false}
// Similar to, echo json_encode(array("success" => false));
// or you can use, something like -
// echo json_encode(array('success' => false, 'message' => 'Not found!'));
}

在你 success回调函数,然后你可以检查
success:function(data){
if(data.success) {
// loop the array, and do whatever you want to do
$.each(data.result, function(key, value){
// you can use $(this) too
// console.log($(this)); // check this for debug and get an idea
});
}
else {
// alert(data.message); // or whatever...
}
}

您可以阅读 here关于 wp_send_json_error辅助函数以了解有关辅助函数的更多信息。

更新 :

还要记住,在 $output=json_encode($output);之后 $output不再是数组,而是 json字符串,所以 is_array($output)将返回 false 但如果您使用 is_array()就在您使用 $output=json_encode($output); 对其进行编码之前喜欢
if( is_array( $output ) ) {
$output = json_encode( $output );
}

在这种情况下, is_array( $output )将返回 true .

An example/simulation.

关于ajax - 在wordpress中使用ajax返回JSON数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17982078/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com