Jquery .每个人的行为都不符合预期

Jquery .每个人的行为都不符合预期,jquery,twitter-bootstrap,Jquery,Twitter Bootstrap,我有一个函数,它接受推送通知中的数据并将其格式化为json,如下所示: { "sent": "02/17/2017", "title": "Some Entry", "body": "The main message here", "picture": "http://example.com/me.jpg", "phone": "555 641-6547" }, { "sent": "02/13/2017", "title": "Some

我有一个函数,它接受推送通知中的数据并将其格式化为json,如下所示:

{
    "sent": "02/17/2017",
    "title": "Some Entry",
    "body": "The main message here",
    "picture": "http://example.com/me.jpg",
    "phone": "555 641-6547"
}, {
    "sent": "02/13/2017",
    "title": "Some Other Stuff",
    "body": "Main content here",
    "link": "http://mycom.com",
    "phone": "555 555-6200"
}
如您所见,它们可能有也可能没有所有可用的名称/值对

该代码用于在模式弹出窗口上显示引导程序:

    function show8(arr) {
  alert('here ** ' + arr);  // lets you see incoming data

            arr = '[' + arr + ']';
            var i = 50 ;    
            var out = '';    
            out += '<div class="panel-group no_wrap widget uib_w_' + i + ' d-margins" data-uib="twitter%20bootstrap/accordion" data-ver="1" ';
            i++ ;
            out += 'id="bs-accordion-11">';
        $.each(JSON.parse(arr), function(idx, obj) {
            out += '<div class="panel widget uib_w_' + i + ' panel-info" data-uib="twitter%20bootstrap/collapsible" data-ver="1">';
            i++ ;
            out += '<div class="panel-heading"><h4 class="panel-title">';
            out += '<a class="accordion-toggle" data-toggle="collapse" href="#bs-accordion-group-' + i + '" data-parent="#bs-accordion-11">';
            out += '<small>' + obj.sent + '</small><br><strong><big>' + obj.title + '</strong></big><br>';
            out += '</a></h4></div>';
            out += '<div id="bs-accordion-group-' + i + '" class="panel-collapse collapse">';
            i++ ;
            out += '<div class="panel-body"><div class="col uib_col_' + i + ' single-col" data-uib="layout/col" data-ver="0">';
            i++ ;
            out += '<div class="widget-container content-area vertical-col">';
/*
            if (obj.picture.length > 0 ) {
                out += '<div class="widget uib_w_' + i + ' scale-image d-margins" data-uib="media/img" data-ver="0">';
                i++ ;
                out += '<figure class="figure-align"><img src="' + obj.picture + '"></figure></div>';
          }  
*/
            out += '<p>' + obj.body + '</p><br><br>';

/*          
    if (obj.phone.length > 0) {out += 'Call: <br><button class="btn widget uib_w_' + i + ' d-margins btn-xs btn-primary" ';
            out += 'data-uib="twitter%20bootstrap/button" data-ver="1" ';
            out += 'onclick= "placeCall(\'' + obj.phone + '\')">' + obj.phone + '</button><br>';}
            i++;  
            if (obj.link.length > 0) {out += 'Website: <br><button class="btn widget uib_w_' + i + ' d-margins btn-xs btn-primary" ';
            out += 'data-uib="twitter%20bootstrap/button" data-ver="1" ';
            out += 'onclick= "viewPage(\'' + obj.link + '\')">' + obj.link + '</button><br>';}
            i++;
*/
            out += '<span class="uib_shim"></span></div></div></div></div></div>';    
        });
        out += '</div>';

               $(".recent").html(out);
               $(".uib_w_8").modal("toggle"); 
}
功能显示8(arr){
警报('here**'+arr);//用于查看传入数据
arr='['+arr+']';
var i=50;
var out='';
out+='';
$.each(JSON.parse(arr)、函数(idx、obj){
out+='';
i++;
out+='';
out+='';
out+='';
i++;
out+='';
i++;
out+='';
/*
如果(obj.picture.length>0){
out+='';
i++;
out+='';
}  
*/
out+=''+obj.body+'



'; /* 如果(obj.phone.length>0){out+='Call:
'+obj.phone+'
';} i++; 如果(obj.link.length>0){out+='网站:
'+obj.link+'
';} i++; */ out+=''; }); out+=''; $(“.recent”).html(out); $(“.uib_w_8”).模式(“切换”); }
如果取消注释任何已注释掉的代码,列表将弹出并无法显示。if(val.length>0)识别出该值存在并且它有内容,但不会显示内容


我在这里遗漏了什么?

这将失败,因为没有图片键:

if(obj.picture.length>0){

如果您在控制台中查看,您将看到如下内容:

无法读取未定义的长度

将其更改为:

if((obj.picture)和&(obj.picture.length>0)){

与此相同:

if(obj.link.length>0){

obj.link
并不总是存在,请将其更改为


if((obj.link)和&(obj.link.length>0)){

列表会弹出这是什么意思?控制台中有错误吗?如果有,有什么错误?抱歉,它无法显示整个列表为什么要这样做?
JSON.parse(arr)
您是否在其他地方对其进行了字符串化?如果(obj.picture.length>0)没有
图片
键,此操作将失败{
将其更改为:
如果((obj.picture)&&&(obj.picture.length>0)){
-同样,链接并不总是存在
如果(obj.link.length>0){
是的,数据是经过严格处理的。我在这个android设备上没有控制台,所以我错过了现场表演的那一部分!我会尝试一下,然后很快给你回复。谢谢。总是最简单的事情会让你绊倒,然后当一切都暴露出来时,让你觉得自己很愚蠢!长度测试应该看看是否存在。那么为什么不呢请直接问这个问题。是的,我是一个新手,虽然我断断续续地在js工作了二十年!我根本没有意识到if(obj.picture)是布尔型的。--谢谢你,Darren Sweeney!欢迎Ed,很高兴它有帮助-使用对象很有趣,但小心处理哈哈