使用空对象

时间:2017-03-16 14:18:03

标签: jquery html json ajax

我正在尝试从JSON数组中获取所有类别标题。但并非所有对象都有类别。因此,当我尝试附加数据时,我一直未定义,因此没有附加其余的数据。

如果Json文件中没有,我想以某种方式给类别一个默认类别。或者甚至把标签的标题作为类别。

我尝试过几种方法,但似乎都没有。我已经制作了一个截至目前为止的内容,以及JSON文件的下载链接。我已经发布了一个 ProblemArea 评论来向您展示我的尝试。

任何帮助将不胜感激!

代码 -

$("#search-btn").click(function (e) {
    
            var userText = $.trim($('#searchArea').val());
            $('.full-post-img').css('display', 'none');
            $('.overlay-hugeinc').css('left', '-9999px');
    
            $.getJSON('http://www.capetownetc.com/api/get_search_results/?search=' + userText, {
                    srsearch: userText
                    , action: "query"
                    , list: "search"
                    , format: "json",
                },
                      
                function (data) {

                    $("#searchR").empty().append('<p class="results">RESULTS</p>');
                
                    if(userText.length === 0){
                        $("#searchR").empty().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
                            var imgThumb1 = item.thumbnail_images.full.url;
                            
                            //****PROBLEM AREA****
                            //CATEGORY
                            var cat = item.categories[0].title;
                            
                            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><p class="p1 text-post-desc" id="p1Desc">' + ex + '</p><p class="p1 post-source" id="p1Source"> / </p></div></div>');
                            
                    }); 
                    }
                
                });
});

JSON Data File

1 个答案:

答案 0 :(得分:0)

如果你真的想要一个快速和脏的检查,只需要一个or-check,这样你就可以设置一个默认值,如果title是未定义的。

var cat = item.categories[0].title || "default value"

如果你真的想过火:

var cat = (item && item.categories && item.categories[0] && item.categories[0].title) || "default value"

您可以使用简单的if语句清除它。只是试图展示几个未定义的检查。