上次我和Ajax和WordPress打架。 我有一个问题,使用Ajax想要加载相同类别的帖子... 在响应中被替换为Object,只有一个条目。
在哪里可以找到问题?
ajax.js
var $fnWritePostGrid = function (idCat) {
var data = {
type: 'POST',
url: ajaxOptions.url,
action: 'kk_load_servicesGrid',
idCat: idCat
};
$.ajax({
type: "POST",
url: ajaxOptions.url,
data: data,
dataType: "json",
success: function (response) {
console.log(response);
}
});
return false;
};
的functions.php
$cat_id = $_POST['idCat'];
$args = array(
'category' => $cat_id,
'posts_per_page' => 8,
'order' => 'DESC'
);
$posts = get_posts($args);
foreach($posts as $post) {
$postID = sanitize_text_field($post->ID);
$postTitle = sanitize_text_field($post->post_title);
$postContent = sanitize_text_field($post->post_content);
$response = array(
'ID' => $postID,
'title' => $postTitle,
'content' => $postContent
);
echo json_encode($response);
exit;
}
总之,代码有效但不返回条目数组,只返回类别中的第一个条目。
请提前帮助和谢谢。
答案 0 :(得分:1)
在foreach循环的第一次迭代之后,好像你的PHP正在退出线程:
echo json_encode($response);
exit;
您可能想要做的是创建一个包含您想要返回的所有帖子的数组 - 如下所示:
$responses = array();
foreach($posts as $post) {
$postID = sanitize_text_field($post->ID);
$postTitle = sanitize_text_field($post->post_title);
$postContent = sanitize_text_field($post->post_content);
$response = array(
'ID' => $postID,
'title' => $postTitle,
'content' => $postContent
);
array_push($responses, $response)
}
echo json_encode($responses);
exit;
这样你实际上将返回一个JSON对象数组,而不是一个JSON对象。