【问题标题】:TypeError: Cannot read properties of undefined (reading 'product')”TypeError:无法读取未定义的属性(读取“产品”)”
【发布时间】:2021-11-19 19:03:30
【问题描述】:

我正在尝试在 Shopify 的购买后脚本中读取 Shopify 产品页面标签和 ID。

您无需熟悉 Shopify 即可了解我面临的这个问题。感觉是 Javascript 问题,我无法准确理解如何引用这些变量或对象。

请阅读 Shopify 的文档 here,了解我可以访问的变量。

我的代码

// Cart variables
var cartTagsString = "";
var cartProductIDString = "";

// Convert array of product tags into string
window.Shopify.order.lineitem.product.tags.forEach(function (item, index) {
cartTagsString = cartTagsString + item;
});

// Convert array of product id's into string
window.Shopify.order.lineitem.product.forEach(function (item, index) {
cartProductIDString = cartTagsString + item.id;
});

错误

“VM1370:44 Uncaught TypeError: Cannot read properties of undefined (reading 'product')”

转到发生错误的确切行,它会将我们带到这里:

window.Shopify.order.lineitem.product.tags

【问题讨论】:

    标签: javascript shopify


    【解决方案1】:

    在这种情况下,文档实际上可能是错误的。

    有一个属性表,其中包含名为 lineItem 的内容(顺便说一下,这与 lineitem 不同,大小写很重要)。但是代码示例显示了一个名为lineItems 的属性。即使在该表中,它描述 lineItem 为“订单的行项目”,这意味着一个数组。

    使用代码示例,您的 forEach 将是这样的:

    window.Shopify.order.lineItems.forEach(function (item, index) {
        cartTagsString = cartTagsString + item.id;
    });
    

    forEach 调用中,每个item 都是该数组中的一个元素。如果您需要访问,item 应该有一个名为 product 的属性。


    至于您第一次致电forEach,我在该页面上看不到任何具有tags 属性的内容。但是结构是一样的。例如,如果任何给定的item 有一个tags 数组,那么您将访问该item。例如:

    window.Shopify.order.lineItems.forEach(function (item, index) {
        cartTagsString = cartTagsString + item.id;
        item.tags.forEach(function (tag) {
            // do something with the tag
        });
    });
    

    您可以联系供应商,要求他们澄清文档。但就像调试步骤一样,如果所有其他方法都失败了,您始终可以console.log 一个对象来观察它具有哪些属性。文档是由人类编写的,人类会犯错误。 (或者可能是由母语不是文档语言的人编写的,并且可能会不时混淆语法。)

    【讨论】:

    • 这有点令人困惑,因为 Jack 引用的文档显示“下表包含通过 window.Shopify 向购买后附加脚本公开的属性的类型定义:”和下表在订单下它说:“lineItem 订单的订单项。”
    • @JoshuaCraven:很好,我想我在代码示例上停下来了。听起来文档是错误的。我会更新答案。
    • 感谢大卫的回复。是的,约书亚,这确实令人困惑。所以通常 Shopify 使用流动代码,但对于这个购买后脚本,因为出于安全原因它在沙箱中触发它使用纯 JavaScript。我在使用液态代码完成所有这些方面经验丰富。我会向您发送指向 lineitem.product 和 product.tags 文档的链接(它在流动代码中,但我正在将其引入 Javascript 或尝试使用)
    • line_item.product -> shopify.dev/api/liquid/objects/…
    • @JackTrowbridge:希望这最终能奏效。我也会注意他们的其他文档。基本上,每当您收到此错误时,它仅意味着您正在读取的属性是 undefined,因此第一步始终是 console.log 该父对象并查看其中的内容。
    猜你喜欢
    • 2021-12-25
    • 2020-11-23
    • 2021-11-26
    • 2021-11-24
    • 2021-12-20
    • 2021-11-27
    • 2022-01-21
    • 2021-12-04
    • 2021-12-09
    相关资源
    最近更新 更多