【发布时间】:2016-07-25 23:49:58
【问题描述】:
基本上,当我运行下面的代码时,cart 和 product 无法识别,我有不知道为什么会这样。
代码如下:
$.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