0

我需要在数据层中编写自定义 javascript 的帮助。我正在尝试获取名称。

宣传印象:

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

我试过这个javascript,但它返回未定义。当我在本地尝试此操作时,它会完美地返回名称。

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

任何人都可以帮助解决这个问题。提前致谢。

4

1 回答 1

3

我猜您正在尝试直接从您的自定义函数中访问 dataLayer。但是 dataLayer 不是(JSON)对象,它是一个对象数组。所以你不能通过点符号来处理电子商务数据,你需要给出 dataLayer 数组元素的索引:

dataLayer[index].ecommerce.promoView.promotions

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

在它的内部数据模型中(不可避免的Simo Ahava 已经写了很多关于此的内容)GTM 将 dataLayer 元素扁平化为单个对象。您不会直接访问此数据模型,而是使用 dataLayer 类型的变量:

在此处输入图像描述

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

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

没有经过适当的测试,所以该功能可能需要调整,但基本上这就是要走的路。

于 2017-02-21T19:43:31.163 回答