2014-07-23 152 views
0

我有一个为webshop菜单抓取一些JSON内容的小脚本。有时一个类别中没有产品,因此当数组为空时,必须显示“找不到产品”行。 我试过用jQuery.isEmptyObject(),但现在文本只显示在其中的产品类别。菜单本身的作品完美除了以上的东西...检查json数组是否为空

所以我的问题:我如何检查json.productsproduct是空的?如果是的话,你会如何纳入脚本和脚本的结尾?

大概一个容易为你....我没有看到它了;)

我有什么:

function widget(catId, catHref){ 
    var url = catHref + 'page1.ajax?limit=4'; 
    $.getJSON(url, function (json){  
    var productsHtml = []; 

     $.each(json.products, function(index, product){ 

     var productHtml = '' + 
      ..... blablabla ..... 

     productsHtml.push(productHtml); 
     }); 
     productsHtml = productsHtml.join(''); 


    if (jQuery.isEmptyObject(json[productsHtml])) { 
     $('#widget-products'+catId+' ul').html('No products'); 
    } else{ 
     $('#widget-products'+catId+' ul').html(productsHtml); 
    } 

    }); 
} 

回答

1

要转换一个数组的字符串与此线:

productsHtml = productsHtml.join(''); 

所以,只要做到这一点:

if ('' == productsHtml) { 
    // blah blah 
根据意见和10

编辑编辑质疑:

要检查是否json.products是空的,只检查json.products.length

if (!json.products.length) { // implies json.products is empty 

你不指定什么product是,你永远在使用它上面的代码。如果是阵列,请检查product.length。对于字符串,请与''进行比较。如果它是一个对象,则使用jQuery.isEmptyObject(product)

编辑2基于评论:

要检查JSON对象有一个给定的属性,你可以使用.hasOwnProperty(),像这样:

if(!json.hasOwnProperty('collection') || !json.collection.hasOwnProperty('products')) { 

如果没有collection财产,这短暂的 - 电路,你知道你没有collection.products。如果它有一个collection属性,它将继续并检查collection.products属性。

+0

那好吧是我的问题完全错误的!你可以再看一下吗?我已经更新了这个问题...... thx! – Meules

+0

我再次想到我的问题是错误的。你可以看看这里 - > jsfiddle.net/meules/AQzXL/1。一个包含产品的json文件在其中包含'collection.products'。一个没有产品的json文件不会。我试着在代码中用一些注释来解释它。如果你能帮助,我会更多然后tahnkfull;) – Meules

+0

啊,现在我明白你想要做什么。请看我上面的第二个编辑;应该照顾你的问题。 –

1

只要像这样检查数组的长度。

if(productsHtml.length>0) 
{ 
//do your stuff here... 
} 

新的问题,我已经更新了你的代码,并添加了一些意见,让你明白: -

$.getJSON(url, function(json) { 
    var productsHtml = []; 
    //here i am checking json or json.products is not undefined 
    if (json && json.products) { 
     $.each(json.products, function(index, product) { 
      //checking if product is not undefined 
      if (product) { 

       //do your stuff 
       var productHtml = '' + 
        .....blablabla..... 

       productsHtml.push(productHtml); 
      } 
     }); 
     productsHtml = productsHtml.join(''); 


     if (jQuery.isEmptyObject(json[productsHtml])) { 
      $('#widget-products' + catId + ' ul').html('No products'); 
     } else { 
      $('#widget-products' + catId + ' ul').html(productsHtml); 
     } 
    } 

}); 
+0

那么是我的问题完全错了!你可以再看一下吗?我已经更新了这个问题...... thx! – Meules

+0

Thx为您的更新。奇怪的是,当有实际产品时,“没有产品”被显示出来。对此有何想法?我完全卡在这一个。 – Meules

+0

分享您的回应意味着json然后我可以检查它... –