Данные JSON, вероятно, неправильно отформатированы - PullRequest
1 голос
/ 06 июня 2011

У меня есть следующий скрипт, который не работает на 100%, он возвращает около 20 неопределенных и где-то между этими неопределенными, он возвращает полное_имя:

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 ]

2 голосов
/ 06 июня 2011

Как сказал hvgotcodes , у вас есть массив с кучей отдельных записей, каждая из которых является объектом только с одним свойством (и каждая из которых имеет различных property).

Возможно, вы хотели это:

[
    {
        "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 голос
/ 06 июня 2011

Этот 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>');
    }
1 голос
/ 06 июня 2011

Это не проблема форматирования.У вас есть массив.Каждый элемент в массиве является литералом объекта.Каждый литерал объекта имеет свойство - у каждого есть отличающееся свойство.'full_name' является свойством только одного литерала объекта - снизу вверх 4.

Другими словами, не каждый элемент в массиве имеет свойство full_name.Если бы они все это сделали, вы бы не получили неопределенность.

...