使用jQuery$.each,Json错误,结果为1

Using jQuery $.each with Json erroring with 1 result

本文关键字:结果 错误 Json each 使用 jQuery      更新时间:2023-09-26

基本上,我将JSON结果转换为html,并使用$.each迭代多个键。例如,我撤回了脸书上的帖子,并在帖子中反复点赞。

问题在于,当有多个"赞"时,一切都很好!尽管当只有1个"like"时,"source"键会从结果集中删除,并且我的javascript会中断,因为我希望它在那里。知道为什么$.each为单个节点跳过一个级别吗?以下是我的代码:

*JQUERY**

          $.each(post.likes.item, function(i, like){
             $(currentpost).find('div.cc_likes').append(like + ',');
             console.log(like)
          });              

*JSON RESULT**

*类单

       likes": {
            "item": {
                "source": {
                    "cta": "Mary Smith",
                    "url": "http:'/'/www.facebook.com'/",
                    "photo": {
                        "image": "https:'/'/graph.facebook.com'/"
                    }
                }
            },

控制台中的结果:

    Object 
      cta: "MaryAnn Smith" 
      photo: Object 
      url: "http://www.facebook.com/" 

*多次点赞

        "likes": {
            "item": [
                {
                    "source": {
                        "cta": "Bobby Carnes Sr.",
                        "url": "http:'/'/www.facebook.com",
                        "photo": {
                            "image": "https:'/'/graph.facebook.com'"
                        }
                    }
                },
                {
                    "source": {
                        "cta": "Jenna Purdy",
                        "url": "http:'/'/www.facebook.com'",
                        "photo": {
                            "image": "https:'/'/graph.facebook.com'"
                        }
                    }
                },
                {
                    "source": {
                        "cta": "Kevin Say",
                        "url": "http:'/'/www.facebook.com'",
                        "photo": {
                            "image": "https:'/'/graph.facebook.com'"
                        }
                    }
                }
            ],
            "count": "10",
            "count_display": "10"
        },

控制台中的结果:

    Object
      source: Object
        cta: "Kevin Smith"
        photo: Object
        url: "http://www.facebook.com/"

由于$.each()需要一个数组或类似数组的对象作为参数,在使用对象post.likes.item之前,请检查它是否是非的数组。以下代码将始终向jQuery-传递一个数组

     $.each([].concat(post.likes.item), function(i, like){
         $(currentpost).find('div.cc_likes').append(like + ',');
         console.log(like)
      });   

解释

[]在JavaScript中是一个空数组。JavaScript中的每个数组都有一个concat方法。

CCD_ 5将CCD_。

  • obj不是数组,则结果为[obj],它是一个包含一个项的数组
  • obj是一个数组,那个么结果就是obj的深度拷贝,它已经是一个阵列了

有关concat方法的更多信息

        if ( isArray ) {
        for ( ; i < length; i++ ) {
                value = callback.call( obj[ i ], i, obj[ i ] );
                if ( value === false ) {
                    break;
                }
            }
        } else {
            for ( i in obj ) {
                value = callback.call( obj[ i ], i, obj[ i ] );
                if ( value === false ) {
                    break;
                }
            }
        }

这是在JSON返回中运行的jquery代码。实际情况是,当您查看多个结果时,它会在数组中循环,返回每个基本级别的对象。但是,当您在单个返回上运行它时,它会循环通过对象属性(在本例中为"source"),并返回该属性的值。

你有两个选择。您可以确保单个项仍然放在数组中,也可以在客户端检查单个项。Moazzam Khan建议的方法在大多数情况下是最好的方法。