JSON数据可能不正确格式化
问题描述:
我有下面的脚本不工作100%,则返回20不确定的,在这些不确定之间的某个地方,它会返回FULL_NAME:JSON数据可能不正确格式化
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": ""
}
]
答
作为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的代码。
答
它不是一个格式问题。你有一个数组。数组中的每个元素都是对象字面值。每个对象文字都有一个属性 - 每个对象都有一个不同的属性。 'full_name'是只有一个对象文字的属性 - 从底部开始是4。
换句话说,并非数组中的每个元素都有full_name
属性。如果他们都这样做了,你就不会被定义为不确定。
答
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>');
}