谷歌标签管理器可变数据层自定义javascript未定义

时间:2017-02-21 13:35:40

标签: javascript google-tag-manager data-layers

我需要帮助在数据层编写自定义javascript。我想找到名字。

promotionImpression:

{
event: 'promoImp',
ecommerce: {
    promoView: {
        promotions: {
            142398:{
                id: '142398',
                name: 'sadr'
            },
            142312:{
                id: '142312',
                name: 'qas'
            }
        }
    }
} },gtm.uniqueEventId: 470

我试过这个javascript但它返回undefined。当我在本地尝试这个时,它会完美地返回名称。

function() {
var names = [];
for (promotion in ecommerce.promoView.promotions) {
    names.push(ecommerce.promoView.promotions[promotion].name);
}
return names.join(); }

任何人都可以提供帮助。提前谢谢。

1 个答案:

答案 0 :(得分:3)

我猜您正试图直接从自定义函数中访问dataLayer。但是dataLayer不是(JSON)对象,它是对象的数组。因此,您无法通过点表示法来处理电子商务数据,您需要提供dataLayer数组元素的索引:

dataLayer[index].ecommerce.promoView.promotions

其中"索引"是包含电子商务数据的dataLayer元素的索引。现在显然会很糟糕(特别是因为索引可能并不总是相同,这取决于你按什么顺序推送到dataLayer),所以有更好的方法。

在其内部数据模型中(不可避免的Simo Ahava has written a lot about this)GTM将dataLayer元素展平为单个对象。您不会直接访问此数据模型,而是使用dataLayer类型的变量:

enter image description here

现在在自定义函数中使用它:

function() {
var names = [];
for (promotion in promotions) {
    names.push(promotions[promotion].name);
}
return names.join(); 
}

未经过适当测试,因此该功能可能需要进行调整,但基本上就是这样。