2013-03-27 69 views
0

我试图在我的JSON中识别一些空数组,并放置一个div。当脚本看到空数组时,它停止加载json。该代码是:Jquery/Ajax请求替换Json订阅源中的空数组

$.each(data.posts, function (i, item) { 
    var newstitle = item.title; 
    var newstmbn = item.thumbnail; 

    if (data !== undefined && data.posts !== undefined && data.posts.attachments !== undefined) { 
     $.each(item.attachments, function (i2, type) { 
      $('#news').append('<div>' + item.thumbnail + '</div>'); 
     }); 
    } else { 
     $.each(item.attachments, function (i2, type) { 
      $('#news').append('<div>' + type.images.thumbnail.url + '</div>'); 
     }); 
    } 
    output.append(news); 

}); 

我的JSON的样子:

{ 
    "posts": [ 
    { 
     "id": 914, 
     "title": "post1", 
     "thumbnail": "\/uploads\/url.jpeg", 
     "attachments": [ 
     { 
      "images": { 
       "thumbnail": { 
        "url": "\/uploads\/url-150x92.jpeg" 
       } 
      } 
     } 
     ] 
    }, 
    { 
     "id": 915, 
     "title": "post1", 
     "thumbnail": "\/uploads\/url.jpeg", 
     "attachments": [] 
    }, 
    { 
     "id": 914, 
     "title": "post1", 
     "thumbnail": "\/uploads\/url.jpeg", 
     "attachments": [ 
     { 
      "images": { 
       "thumbnail": { 
        "url": "\/uploads\/url-150x99.jpeg" 
       } 
      } 
     } 
     ] 
    } 
]} 

所以你可以看到一些“附件”是空的,我希望把“item.thumbnail”来代替,但它似乎没有加工。你能帮我么?

回答

2

我认为你的主要问题是这一行:

if (data !== undefined && data.posts !== undefined && data.posts.attachments !== undefined) 

这是摆在。每个迭代循环里面在data.posts阵列。

if (data !== undefined && data.posts !== undefined) 

应放置在该循环之外,以测试循环甚至是否可能。

data.posts.attachments !== undefined 

没有任何意义,因为data.posts是一个数组,因此没有附件属性。这应该改为

if(item.attachments !== undefined) 

如果这是假的,即该项目没有附件,你不能遍历item.attachments像你现在正在做。此外,你已经得到了的if/else错周围的方式,因此与

$.each(item.attachments, function (i2, type) { 
    $('#news').append('<div>' + type.images.thumbnail.url + '</div>'); 
}); 

编辑取代

$.each(item.attachments, function (i2, type) { 
    $('#news').append('<div>' + type.images.thumbnail.url + '</div>'); 
}); 

$('#news').append('<div>' + item.thumbnail + '</div>'); 

$.each(item.attachments, function (i2, type) { 
    $('#news').append('<div>' + item.thumbnail + '</div>'); 
}); 

:自我意识到上述可能很难做到低,来了什么,我相信是正确的代码:在http://jsfiddle.net/Jh3hk/

+0

对不起彼得概念

if (data !== undefined && data.posts !== undefined) { $.each(data.posts, function (i, item) { if (item.attachments !== undefined && item.attachments.length > 0) { $.each(item.attachments, function (i2, type) { $('#news').append('<div>' + type.images.thumbnail.url + '</div>'); }); } else { $('#news').append('<div>' + item.thumbnail + '</div>'); } output.append(news); //I assume output is a valid jquery object... }); } 

证明,我不是在jQuery的大师并不能得到它。您能否请详细解释一下...... – qqruza 2013-03-27 22:11:34

+0

谢谢彼得,这个问题只在显示“item.thumbnail”而不是“附件”时才显示为空......我添加了您的行,当附件为空时它只是不显示任何内容...当附件存在时,它显示图像... – qqruza 2013-03-27 22:25:25

+0

请检查我链接的小提琴,它使用与上面完全相同的代码,除了我用'$('body' )',它似乎工作正常。 – 2013-03-27 22:29:16