为什么我的jQuery $ .each()函数返回4个对象,而应该只有一个?

时间:2015-06-27 16:10:15

标签: jquery ajax json

我有一个按钮,可以对此页面执行ajax调用:http://jsonplaceholder.typicode.com/。当我不使用$.each()时,它会显示一个帖子。但是如果我使用$.each(),它将返回4个对象。见屏幕截图:

result of ajax call

这是jQuery:

button.on('click', function(){
    $.ajax({
        url     : 'http://jsonplaceholder.typicode.com/posts/1',
        method  : 'GET',
        dataType: 'json',
        contentType: 'application/json',
        success : function(result) {
            console.log(result);
            /* Build HTML result */
            $.each(result, function(index, post){
                var msg = $('<p></p>');
                    msg.append('Title: '+result.title+'<br>');
                    msg.append('User ID: '+result.id+'<br>');
                    msg.append(result.body);
                    msg.insertAfter(button);
            });
        },
        error   : function(request, errorType, errorMessage) {
            alert('Error ' + errorType + ' with message:' + errorMessage);
        },
        timeout : 3000,
        beforeSend : function() {
            //runs before request is send
            smiley.remove();
            confirmation.insertBefore(button);
        },
        complete: function() {
            //runs once the request is finished
            confirmation.remove();
            smiley.insertBefore(button);
        }
    });
});

但根据jsonplaceholder,应该只有一个对象。另外,我的控制台说应该只有一个对象。

这是我回来的JSON:

{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit suscipit recusandae consequuntur expedita et cum reprehenderit molestiae ut ut quas totam nostrum rerum est autem sunt rem eveniet architecto"
}

为什么$.each()输出相同的结果4次?我该如何解决它,所以它只输出一次?

编辑:我从以下答案中学到了什么

感谢所有帮助&amp;坚韧但善良的爱。我现在明白,根据返回的内容(对象,数组,html,json),我需要不同的方法来处理结果。

在上面的例子中,以下代码就足够了(感谢@ user1278584):

var msg = 'Title: '+result.title+'<br>';
msg += 'User ID: '+result.id+'<br>';
msg += result.body;
$("<p>" + msg + "</p>").insertAfter(button);

我希望这有助于其他初级程序员。为大家喝彩。

3 个答案:

答案 0 :(得分:2)

它没有返回“4个对象”。

在浏览器中访问http://jsonplaceholder.typicode.com/posts/1

这是一个有4个属性的对象。你正在迭代属性。请参阅jQuery文档以了解正确的$.each用法。

答案 1 :(得分:1)

如果给定的参数是object而不是array,则

src/main/scala/worksInAllVersions.scala src/main/scala_211???/myTraitForScala211.scala src/main/scala_210???/myTraitForScala210.scala 方法迭代所有对象属性,您不应该使用$.each或将返回的对象包装到数组中。

答案 2 :(得分:1)

查看这个jsfiddle:http://jsfiddle.net/ayns4Lxr/

正如其他人所提到的,你的JSON响应有四个对象,这就是你获得4个结果的原因。

如果要更改JSON结果以使用$.each属性,请将响应更改为以下内容:

{
    "results": {
        "userId": 1,
        "id": 1,
        "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
        "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
    }
}