Reputation: 15925
I have the following script which does not work 100%, it returns about 20 undefined and somewhere in between those undefined, it will return the 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 />'))
}
});
}
I think it has something to do with the json data, which is probably not formatted correctly to loop through it???
[
{
"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": ""
}
]
Upvotes: 1
Views: 777
Reputation: 1073978
As hvgotcodes said, what you have there is an array with a bunch of individual entries, each of which is an object with just one property (and each of which has a different property).
You may have wanted this:
[
{
"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": ""
}
]
...which is an array with only one entry, an object with a whole list of properties. (Presumably you'd have more than one object in total, but there's only one above.) If so, you'll need to change the code generating the JSON.
Upvotes: 2
Reputation: 413682
That JSON is a single array of objects. Only one of those objects has a "full_name" property.
If you want just that value, you could change your loop:
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>');
}
Upvotes: 1
Reputation: 120168
Its not a formatting problem. You have an array. Each element in the array is an object literal. Each object literal has a property -- each one has a different property. 'full_name' is a property on only one object literal -- 4 up from the bottom.
In other words, not every element in the array has a full_name
property. If they all did, you would not get undefined.
Upvotes: 1