2016-07-25 21 views
0

基本上,當我運行下面的代碼,產品不承認,我不知道爲什麼那是。

下面的代碼:

$.when(
    $.getJSON(_config.shopifyAjaxCartURL), 
    $.getJSON(_config.shopifyAjaxProductURL) 
).then(function(cart,product){ 
    alert ('1 - TOTAL ITEM COUNT: ' + cart.item_count); 
    for (var i = 0; i <= cart.item_count; i++) { 
     alert ('2 - LOOPING'); 
     if (cart.items[i].sku == product.variants[0].sku) { 
      productQuantity = cart.items[i].quantity; 
      alert ('3 - FOUND IT'); 
      return false; 
     }    
    }   
    alert ('NUMBER 4'); 
}); 

下面是結果:

  • 1:提示 「1 - 項目總COUNT:未定義

  • 2:不會進入循環。

  • 3:提示 「NUMBER 4」

-

在另一方面,當我刪除這兩個參數,但是$。當和功能之一,這一切都完美。例如,這會工作:

$.when($.getJSON(_config.shopifyAjaxCartURL)).then(function(cart){ ..... 

輸出將是:

  • 1:提示 「1 - TOTAL項目計數:」

  • 2:提示「2 - LOOPING」。

  • 3:提示「NUMBER 4」(因爲它現在找不到product.variants[0].sku)。

-

爲什麼這兩個參數是相互衝突的任何想法?任何幫助將不勝感激!


編輯:

更新到我的進步:我徑自刪除第二個參數,所以,我只能讓一個JSON請求,並只擁有cart參數。由於我使用的是Shopify腳本(使用Liquid),我繼續嘗試使用Liquid對象來獲取產品SKU,而不是從產品的JSON中獲取。令我吃驚的是,它起作用了,只要我把Liquid Object放在引號中。我現在看起來是這樣的:

$.when($.getJSON(_config.shopifyAjaxCartURL)).done(function(cart){ 

      alert ('1 - TOTAL ITEM COUNT: ' + cart.item_count);            

      for (var i = 0; i <= cart.item_count; i++) {  

      alert ('2 - LOOPING'); 

      if (cart.items[i].sku == "{{product.variants[0].sku}}") { 
       productQuantity = cart.items[i].quantity; 
       alert ('3 - FOUND IT'); 
      } 

      } 

      alert ('NUMBER 4'); 

然而,雖然它通過循環完美現在,它完全跳過其餘代碼。的輸出是這樣的:

  • 1:提示 「1 - TOTAL項目計數:」

  • 2:提示 「2 - 循環」。

  • 3:提示「3-FOUND IT!」

...... 後「{{product.variants它從來沒有那張NUMBER 4我懷疑這是因爲引號註釋掉行的其餘部分,[0] .sku}}「;似乎它並不完全將「{{...}}」作爲引號之間的內容進行計數。

你知道這可能是爲什麼嗎?

+1

您是否嘗試獨立運行每個參數,或者只是第一個參數? – BobRodes

+0

感謝您的回覆,我獨自嘗試了第二個,如果它本身就很好。 – MigsO

回答

0

使用.then.done有區別。您正嘗試使用.done的功能,但您使用的是.then。我建議嘗試.done。此外,這裏是一些更多的信息:

jQuery deferreds and promises - .then() vs .done()

+0

非常感謝您的回覆,我確實在'.then'之前嘗試'.done',結果相同,恐怕:/ – MigsO

+0

到目前爲止,很顯然'cart'沒有被正確傳遞給循環。仍然在研究爲什麼會這樣。 – iHowell

+0

確實很奇怪 - 第二個參數爲什麼會有這個原因嗎? – MigsO

0

我放一個breakif()條款解決了眼前的問題(而我以前在同一個地方嘗試return false)。下面是它的外觀:

$.when($.getJSON(_config.shopifyAjaxCartURL)).done(function(cart){ 

     alert ('1 - TOTAL ITEM COUNT: ' + cart.item_count);            

     for (var i = 0; i <= cart.item_count; i++) {  

     alert ('2 - LOOPING'); 

     if (cart.items[i].sku == "{{product.variants[0].sku}}") { 
      productQuantity = cart.items[i].quantity; 
      alert ('3 - FOUND IT'); 
      break; 
     } 

     } 

     alert ('NUMBER 4'); 

最後,輸出是:

  • 1:提示 「1 - 項目總COUNT:92」
  • 2:提示 「循環」
  • 3:提示「FOUND IT」
  • 4:提示「NUMBER 4」

這對於我的目的,適用於現在,但我還是不明白,爲什麼在$.WHEN函數的兩個參數是無效彼此。有沒有人對這個問題有所瞭解?