JSON数据可能格式不正确

时间:2011-06-06 15:58:32

标签: jquery json asp.net-3.5

我有以下脚本,它不能100%工作,它返回大约20个未定义的,在这些未定义的位置之间,它将返回full_name:

function get_staff_details(phrase) {
    $.ajax({
        url: 'get_staff_details.aspx?rand=' + Math.random(),
        type: 'POST',
        dataType: 'json',
        data: { strPhrase:phrase },
        error: function(xhr, status, error) {
            console.log(status);
            console.log(xhr.responseText);
        },
        success: function(results) { 
            var itemList = results;
            var buildHTML = [];

            for (var i = 0; i < itemList.length; i++) {
                buildHTML.push('<div class="container"><a href="#" class="title" target="_blank">' + itemList[i].full_name + '</a></div>');
            }

            $('.portlet-content').empty().append(buildHTML.join('<hr />'))
        }
    });
}

我认为它与json数据有关,可能没有正确格式化以循环通过它???

[
    {
        "image": "http://intranet/images/jb.jpg"
    },
    {
        "position": "Marketing Manager"
    },
    {
        "cms_initials": "JB"
    },
    {
        "department_name": "Marketing"
    },
    {
        "secretary": ""
    },
    {
        "fee_earner": ""
    },
    {
        "mon_from": "08:30"
    },
    {
        "mon_to": "17:00"
    },
    {
        "tue_from": "08:30"
    },
    {
        "tue_to": "17:00"
    },
    {
        "wed_from": "08:30"
    },
    {
        "wed_to": "17:00"
    },
    {
        "thu_from": "08:30"
    },
    {
        "thu_to": "17:00"
    },
    {
        "fri_from": "08:30"
    },
    {
        "fri_to": "17:00"
    },
    {
        "full_name": "Jo Bloggs"
    },
    {
        "extension": "0000"
    },
    {
        "direct_line_number": "0000000000"
    },
    {
        "blackberry_number": ""
    }
]

3 个答案:

答案 0 :(得分:2)

作为hvgotcodes said,你所拥有的是一个包含一堆单独条目的数组,每个条目都是一个只有一个属性的对象(并且每个属性都有一个不同的属性)。

你可能想要这个:

[
    {
        "image": "http://intranet/images/jb.jpg",
        "position": "Marketing Manager",
        "cms_initials": "JB",
        "department_name": "Marketing",
        "secretary": "",
        "fee_earner": "",
        "mon_from": "08:30",
        "mon_to": "17:00",
        "tue_from": "08:30",
        "tue_to": "17:00",
        "wed_from": "08:30",
        "wed_to": "17:00",
        "thu_from": "08:30",
        "thu_to": "17:00",
        "fri_from": "08:30",
        "fri_to": "17:00",
        "full_name": "Jo Bloggs",
        "extension": "0000",
        "direct_line_number": "0000000000",
        "blackberry_number": ""
    }
]

...这是一个只有一个条目的数组,一个包含完整属性列表的对象。 (据推测,你总共有一个以上的对象,但上面只有一个。)如果是这样,你需要更改生成JSON的代码。

答案 1 :(得分:1)

它不是格式化问题。你有一个阵列。数组中的每个元素都是一个对象文字。每个对象文字都有一个属性 - 每个属性都有一个不同的属性。 'full_name'只是一个对象文字的属性 - 从底部向上4个。

换句话说,并非数组中的每个元素都具有full_name属性。如果他们都这样做了,你就不会被定义。

答案 2 :(得分:1)

JSON是一个单独的对象数组。这些对象中只有一个具有“full_name”属性。

如果你只想要那个值,你可以改变你的循环:

    for (var i = 0; i < itemList.length; i++) {
        if (itemList[i].hasOwnProperty('full_name'))
            buildHTML.push('<div class="container"><a href="#" class="title" target="_blank">' + itemList[i].full_name + '</a></div>');
    }