JSON 循环中只有 1 个结果

Only 1 result from JSON loop

本文关键字:结果 循环 JSON      更新时间:2023-09-26

有人可以解释为什么这只返回 1 个结果(应该有 4 个)。它只返回最新的帖子标题,我想在其中获取类别 (ID:121) 中的所有帖子标题,在本例中为四个。

<script type="text/javascript">
            var posturl = "http://www.tropical420.com/api/get_posts/?posts_per_page=-1";
            $.ajax({
                type: 'GET',
                url: posturl,
                complete: function(){                    
                },
                success: function (data) {
                    var response = data; //JSON.parse(data);
                    //loop through posts
                    for(var i = 0; i != response.posts.length; i++) {
                    //get each element in the array
                    var post = response.posts[i];
                    // post vars
                    var postTitle   = post.title;
                    var postContent = post.content;
                    var postCategory = post.categories[i].id;
                    // output stuff so we can see things

                        if (postCategory == '121') {
                            $("#post").append(postTitle + "<br />").trigger('create');
                        }
                    }
                },
                error:function (xhr, ajaxOptions, thrownError) {                    
                    alert("Error");
                }
            });
         </script>
<div id="post"></div>

您遇到的问题是您没有遍历所有类别,而只是使用与帖子数组相同的索引进行引用。你应该像这样迭代所有类别

var postCategories= post.categories;
for (var postCategoryIndex in postCategories)
{
    var postCategory = postCategories[postCategoryIndex].id;
    if (postCategory == '121') {
      $("#post").append(postTitle + "<br />").trigger('create');
    }
}

返回的 JSON 确实包含 49 个帖子,如果您尝试过console.log(response.posts.length)

Sanfor 指出了代码中的逻辑错误,但整个回调函数可以写得更干净,如下所示:

function (data) {
    data.posts.filter(function (post) {
        return post.categories.filter(function (cat) { return cat.id === '121'; });
    }).forEach(function (post) {
        $("#post").append(post.title + "<br />").trigger('create');
    });
}