Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
52
rated 0 times [  58] [ 6]  / answers: 1 / hits: 16490  / 11 Years ago, mon, august 26, 2013, 12:00:00

I am using Google Books API to receive a list of books, but sometimes some book entry does not have some keys/properties, e.g., Authors, or does not have a Thumbnail. Thus JavaScript says that the property im trying to access is undefined and my application stucks.



Example Json data example from a book search containing the keywork Java



Full link



https://www.googleapis.com/books/v1/volumes?q=java&callback=jQuery191020691258599981666_1377508821982&_=1377508821983


E.g., when Authors is missing



TypeError: row.volumeInfo.authors is undefined


I tryied two solutions suggested



if ( typeof (authors) != undefined){}


and



if('authors' in booksObject) {}


but non of them seems to work, since they never enter the loops even when this proerty exists.



This is where I call



function populateListview(books) {

//iterate each returned item
$.each(books.items, function(i, row) {

//populate each row in the list
var htmlString = '<li><a href=book_details.html?id=' + row.id + '><img src=';

htmlString += row.volumeInfo.imageLinks.thumbnail + '';
htmlString += 'class=ui-li-has-thumb/><h3>';
//Check if authors exists in JSON
htmlString += row.volumeInfo.title + '</h3><p>' + row.volumeInfo.authors[0] + '</p></a></li>';

//If not add an undefined authors string in the authors


console.log(htmlString);

//append new html to the list
$('#book_list').append(htmlString);
});

$('#book_list').listview('refresh');
// refresh the list-view so new elements are added to the DOM
};

More From » jquery

 Answers
23

You can check $.isArray(row.volumeInfo.authors) && row.volumeInfo.authors.length > 0



console.log(books.toString());
// iterate each returned item
$.each(books.items, function(i, row) {

// populate each row in the list
var htmlString = '<li><a href=book_details.html?id=' + row.id
+ '><img src=';

htmlString += row.volumeInfo.imageLinks.thumbnail + '';
htmlString += 'class=ui-li-has-thumb/><h3>';
if ($.isArray(row.volumeInfo.authors) && row.volumeInfo.authors.length > 0) {
// code for what to do with json here
htmlString += row.volumeInfo.title + '</h3><p>'
+ row.volumeInfo.authors[0] + '</p></a></li>';
} else {
htmlString += row.volumeInfo.title + '</h3><p>' + Author Undifined
+ '</p></a></li>';
}

console.log(htmlString);

// append new html to the list
$('#book_list').append(htmlString);
});

$('#book_list').listview('refresh');
// refresh the list-view so new elements are added to the DOM

[#76132] Saturday, August 24, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
tristab

Total Points: 735
Total Questions: 106
Total Answers: 96

Location: Grenada
Member since Sun, Dec 20, 2020
3 Years ago
tristab questions
Sat, Sep 25, 21, 00:00, 3 Years ago
Sun, Jan 31, 21, 00:00, 3 Years ago
Wed, Dec 2, 20, 00:00, 4 Years ago
Fri, Oct 23, 20, 00:00, 4 Years ago
;