2014-07-23 154 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然後我可以檢查它... –