【问题标题】:Multiple data fields aren't recognized in $.WHEN function (JQUERY, SHOPIFY)$.WHEN 函数 (JQUERY, SHOPIFY) 中无法识别多个数据字段
【发布时间】:2016-07-25 23:49:58
【问题描述】:

基本上,当我运行下面的代码时,cartproduct 无法识别,我有不知道为什么会这样。

代码如下:

$.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 - 项目总数:未定义

  • 2:不进入循环。

  • 3:提示“NUMBER 4”

--

另一方面,当我删除 $.when 和函数的两个参数中的一个时,它一切正常。例如,这会起作用:

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

输出将是:

  • 1: 提示“1 - 项目总数:92

  • 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 - 项目总数:92

  • 2:提示“2 - LOOPING”。

  • 3:提示“3 - 找到了!”

...... 它永远不会继续到第 4 位。 我怀疑这是因为引号将注释掉行的其余部分,在 "{{product.variants[0 ].sku}}";似乎它并没有将“{{...}}”内容完全计入引号之间。

你知道为什么会这样吗?

【问题讨论】:

  • 您尝试单独运行这两个参数中的每一个,还是只运行第一个?
  • 感谢您的回复,我也独立尝试了第二个,如果单独使用就可以了。

标签: javascript jquery html shopify liquid


【解决方案1】:

使用.then.done 是有区别的。您正在尝试使用.done 的功能,但您使用的是.then。我建议尝试.done。此外,这里还有更多信息:

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

【讨论】:

  • 非常感谢您的回复,我在.then 之前尝试过.done,恐怕结果相同:/
  • 到目前为止,很明显cart 没有被正确地传递给循环。仍在研究为什么会这样。
  • 确实很奇怪——第二个参数有什么原因会这样吗?
【解决方案2】:

我通过在if() 子句上添加break 解决了当前的问题(而我之前曾在同一个地方尝试过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 - 项目总数:92”
  • 2:提示“LOOPING”
  • 3:提示“找到它”
  • 4:提示“NUMBER 4”

目前这对我有用,但我仍然不明白为什么 $.WHEN 函数上的两个参数会相互失效。有没有人深入了解这个特定问题?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多