Estoy utilizando la búsqueda de Libros de Google API para recibir una lista de libros, pero a veces algún libro de entrada no tiene algunas teclas/propiedades, como por ejemplo, Autores, o no tiene un Miniatura. Así JavaScript dice que la propiedad que estoy intentando acceder no está definido y mi aplicación stucks.

Ejemplo Datos Json ejemplo de la búsqueda de un libro que contiene la keywork Java

Enlace completo

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

E. g., cuando Autores falta

TypeError: row.volumeInfo.authors is undefined

Me trató de dos soluciones sugeridas

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

y

if('authors' in booksObject) {}

pero no de ellos parece funcionar, ya que nunca entre los bucles incluso cuando esta propiedad existe.

Aquí es donde me llame

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
};
InformationsquelleAutor Lali Pali | 2013-08-26

3 Comentarios

  1. 1

    Puede comprobar $.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
    • ¿Este código transfroms el JSON en una matriz. Es JSON sólo una cadena o un objeto, en este caso ?
    • no transformar cualquier dato… el único cambio es en el if condición
    • Es posible hacer esto con varias filas yo.e Autor, Título, Subtítulo, Descripción, etc.. Si son ‘undefined’
  2. 1

    Intente esto :

    if(booksObject.image) {
     //do stuff with it
     } else if( booksObject.author ) {
     //do stuff with author
     }
  3. 0

    Aquí presentamos una forma sencilla de comprobar si cualquier tecla o el valor existe en su JSON.

    var jsonString = JSON.stringify(yourJSON);
    
    if (jsonString .indexOf("yourKeyOrValue") > -1){
        console.log("your key or value exists!");
    }

    Es rápido, simple y fácil.

Dejar respuesta

Please enter your comment!
Please enter your name here