2014-01-23 7 views
0

Я использую google news search api и возвращаю данные в формате json. Я использую ajax, чтобы получить данные и проанализировать их.jquery check json data

Это мой код:

function doAjax(query){ 
    alert(query); 
    var target = "https://ajax.googleapis.com/ajax/services/search/news?v=1.0&q="+query+"&rsz=large"; 
    $.ajax({ 
     url: target, 
     cache: false,     
     dataType:'jsonp', 
     success: function(data) { 
      //alert(data.responseData.results); 
      for(var x = 0; x < 8; x++){ 
       var title = data.responseData.results[x].titleNoFormatting; 
       //var content = data.responseData.results[x].content; 
       //var image = data.responseData.results[x].image.url; 

       $("#home").append(x+"---"+title+'<hr>'); 
      } 
     }, 
     error: function(jxhr,e){ 
     alert(jxhr.status+" --- "+e.responseText); 
     } 
    }); 
} 

Когда я запускаю этот код, я получаю 8 названий. но когда я раскомментирую эту строку var image = data.responseData.results[x].image.url;, я получаю только 3 или 4 результата. Я исследовал данные, полученные из google. Я обнаружил, что некоторые результаты не имеют изображений. Как проверить результат json, если у него есть изображение. Я все еще хочу отображать заголовок статьи, даже если изображения не было.

+1

изображение = data.responseData.results [х] .image && data.responseData.results [x] .image.url – dandavis

+0

var image = data.responseData.results [x] .image; image = image && image.url; – dandavis

ответ

1

вы должны проверить изображение существует, прежде чем получить его URL

if(typeof(data.responseData.results[x].image) == "undefined"){ 
    alert('no image'); 
}else{ 
    var image = data.responseData.results[x].image.url; 
} 
1

Что реакция выглядит? В большинстве браузеров есть инструменты разработчика, которые позволят вам увидеть запросы и ответ. Вероятно, ваша петля задыхается, потому что data.responseData.results[x].image не определено, поэтому data.responseData.result[x].image.url выдает ошибку типа (undefined не имеет свойства url).

Чтобы защититься от этого, просто проверить его, как это:

if(data.responseData.result[x].image) { 
    var image = data.responseData.result[x].image.url; 
} 

data.responseData.result[x].image Если это undefined то она будет определена как falsey и тело if не будет выполняться (и не будет бросать ошибка, которая нарушает вас из функции).

1

Вы можете проверить изображение как

if (typeof data.responseData.image != 'undefined' && typeof data.responseData.image.url != 'undefined') { 
    // set the image here 
} 
1

Typeof может быть использован для определения, является ли переменная определена или нет.

Пример

var var_one = ""; 

alert(typeof var_one); // alerts "string" 
alert(typeof var_two); // alerts "undefined" 
alert(typeof var_two == "undefined"); // alerts "true" 

Таким образом, вы можете указать:

if (typeof var_two != "undefined") 
{ 
    alert("variable is undefined!"); 
} 
else 
{ 
    alert("variable is defined... use it!"); 
} 

Принимая во внимание вышесказанное, можно сделать следующее:

var image = ""; 

if (typeof data.responseData.results[x].image.url != "undefined") 
{ 
    image = data.responseData.results[x].image.url; 

    // You can then specify where the image url will go. 
}