循环通过JSON文件。如果没有数据 - 请做后备

时间:2017-03-17 10:41:26

标签: jquery html json ajax

我希望有人能帮助我完成这个遍历所有json对象的循环,然后从该对象获取特定数据。

我一直遇到同样的问题 -

我正在寻找缩略图的网址。 .each函数将遍历JSON并获取所需的数据。但如果有一个对象没有缩略图属性,那么我得到一个“未捕获的TypeError:无法读取属性'完整'的未定义”...

这是可以理解的,因为那里什么都没有。所以我想做一个检查,确保它首先具有属性,如果是,则获取数据,如果没有,则它将进入json文件中的其他位置以获取数据。

我已经包含了一小段我的ajax调用和Jquery循环。我已经在问题区域中添加了注释,并且我已经链接了JSON文件以供您查看/使用。

任何帮助将不胜感激!

代码 -

$("#search-btn").click(function (e) {
    
            var userText = $.trim($('#searchArea').val());
            $('.full-post-img').css('display', 'none');
            $('.full-post-text').css('display', 'none');
            $('#op').attr('checked', false);
    
            $.getJSON('http://www.capetownetc.com/api/get_search_results/?search=' + userText, {
                    srsearch: userText
                    , action: "query"
                    , list: "search"
                    , format: "json",
                },
                      
                function (data) {
                
                    if(userText.length === 0){
                        $("body").append("<p class='results'>Please enter a keyword</p>");
                         $('#sLoad').css('opacity', '0');
                    }
                    else{
                        $("#swipe").empty();
                        
                        $.each(data.posts, function (i, item) {
//                          $('#sLoad').css('opacity', '0');
                            
                            //EXCERPT
                            var ex = item.excerpt;
                            var maxLength = 100;
                            ex = ex.substr(0, maxLength);
                            
                            //THUMBNAIL
                            //***PROBLEM AREA***
                            var imgThumb1 = item.thumbnail_images.full.url;
                            //So on certain keywords that are being searched, the JSON object might not have the "thumnail_image" property, so it's undefined and breaks the rest of my code, so then it must go somehwere else and get it. (Probably done with a if/else statement"
                            
                            
                            //CATEGORY
                            var cat = (item && item.categories && item.categories[0] && item.categories[0].title) || userText;
                            
                            if(cat.hasOwnProperty(i)){
                                console.log('Is valid');
                            }

                            
                            console.log(cat);
                            
                            $("#swipe").append('<div class="p1 full-post-text"><a class="p1 link-click" id="post2" target="_blank"></a><div class="p1 text-post-img"><span class="p1 card-img1" id="p1Img" style="background-image:url(' + imgThumb1 + ');"></span><a class="p1 post-cat">' + cat + '</a> </div><div class="p1 full-text-info"><h2 class="p1 text-heading" id="p1Heading">' + item.title + '</h2>' + ex + '</div></div>');
                            $('p.results').css('display', 'none');
                    }); 
                    }
                    //SEARCH SUCCESS
                    $('#sLoad').css('opacity', '0');
                    $('#results').css('display', 'inline-block');
                    $('#search-img').css('display', 'none');
                    $('#iSlider').css('display', 'none');
                    $('#searchBR').css('display', 'block');
                });
});

JSON Data file

1 个答案:

答案 0 :(得分:0)

您应该检查if (typeof item.thumbnail_images !== "undefined" && item.thumbnail_images != null) { //do magic here } else { //handle undefined or null cases }