2012-11-06 57 views
1

我有一個問題我找不到自己,所以任何幫助讚賞。檢查變量是否存在於json字符串

我有一個充滿了一些JSON數據的動態購物車。在購物車中,運費也由同一個json數據填充。當方法可用時,腳本本身就可以工作。當運送方法不適用於該國家時,腳本應該說「不可用」或類似的東西。相反,它會返回一個未定義的錯誤,導致購物車無法工作。經過一番搜索後,我發現當用戶來自國家A(由購物車支持)時,變量「methods」出現在Json字符串中。當用戶來自國家B(不支持)時,變量「方法」不存在於json字符串中。顯然這會導致錯誤。 所以我試圖實現的是檢查變量「方法」是否存在。 我發現了一些像使用typeof,HasOwnProperty,lenght()等答案,但我無法弄清楚我應該如何在下面的腳本中實現它。

我的腳本

<script type="text/javascript"> 

     function getPriceDynamicCart(price){ 
      price = parseFloat(price).toFixed(2); 
      price = '€ ' + price.replace('.', ','); 
      return price; 
     } 
     function loadDynamicCart(){ 
      var url = "{{ '/cart/' | url }}?format=json"; 

      $.getJSON(url,function(data){ 

      var cartHtml = ''; 
      var priceTotal = 0; 
      var foundShipment = false; 

      $.each(data.cart.products, function(index, product){     

       priceTotal = priceTotal + parseFloat(product.price.price_incl); 
       productTitleLimit = jQuery.trim(product.fulltitle).substring(0, 19); 

       cartHtml = cartHtml + 
       '<div class="cart-product"><div class="cart-quantity">' +product.quantity+'&nbsp;x&nbsp;</div><div class="cart-title"><a href="'+ product.url +'" alt="'+ product.fulltitle + '" title="'+ product.fulltitle + '">' + productTitleLimit + '</a></div><div class="cart-price">' + getPriceDynamicCart(product.price.price_incl) + '</div></div>'; 
      }); 

      $.each(data.cart.shipping.methods, function(index, method){ 

       if(!foundShipment && !method.cod && !method.pickup) { 
       priceTotal = priceTotal + parseFloat(method.price.price_incl); 
       cartHtml = cartHtml + 
        '<div class="cart-shipping"><a class="vracht" style="cursor:pointer;" rel="nofollow">Verzendkosten:<br />(Vervallen bij afhalen)</a><div class="cart-price"> ' + getPriceDynamicCart(method.price.price_incl) + '</div></div>'; 

       foundShipment = true;     
       } 
      }); 

      cartHtml = cartHtml + 
       '<div class="cart-total"><div class="total">Totaal(incl. btw): <span>' + getPriceDynamicCart(priceTotal) + '</span></div>'; 

      $('#dynamic_cart').html(cartHtml); 

      }); 
     } 

     $().ready(function(){ 
      loadDynamicCart(); 
     }); 
     </script> 
+0

我不想標記爲完全重複...但這裏是一個答案,顯示如何測試一個值對'undefined'。 [Javascript isset()等效](http://stackoverflow.com/a/2281671/558021) – Lix

回答

3
if(data.cart.shipping.methods !== undefined){ 

    $.each(data.cart.shipping.methods, function(index, method){ 

      if(!foundShipment && !method.cod && !method.pickup) { 
      priceTotal = priceTotal + parseFloat(method.price.price_incl); 
      cartHtml = cartHtml + 
       '<div class="cart-shipping"><a class="vracht" style="cursor:pointer;" rel="nofollow">Verzendkosten:<br />(Vervallen bij afhalen)</a><div class="cart-price"> ' + getPriceDynamicCart(method.price.price_incl) + '</div></div>'; 

      foundShipment = true;     
      } 
     }); 
}else{ 
    cartHtml = cartHtml + 
       '<div class="cart-shipping"><a class="vracht" style="cursor:pointer;" rel="nofollow">Verzendkosten:<br />(Vervallen bij afhalen)</a><div class="cart-price">**Anything you care to write**</div></div>'; 
} 

這應該工作。

編輯,我已經添加了一個else語句來設置cartHtml變量,所以您有更多的靈活性以供將來使用。

+0

這個簡單?它似乎工作......你知道我一直在尋找解決方案多久了...... Thx你讓我的一天! – Meules

+0

對不起後一個問題。這說「如果不確定」?如何添加「替換」+ getPriceDynamicCart +的代碼,如「不可用」? – Meules

+1

編輯我的答案,我已經使用了一個else語句,所以你可以更靈活地使用你將來可能做的事情。例如,您可能想在屬性未定義時使用函數。 – daveyfaherty

0

您可以檢查data.cart.shipping.methods物業打電話each以前不爲空/未定義:

if (data.cart.shipping.methods) { 
    $.each(data.cart.shipping.methods, function(index, method){ 
    //... 
    } 
} 
+0

不應該檢查'undefined'而不是'null'嗎?在這種情況下功能相同,因爲它們都是虛假的,但仍然是。 –

相關問題