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

标签 javascript google-tag-manager data-layers

我需要在数据层中编写自定义 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(); }

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

最佳答案

我猜您正在尝试直接从自定义函数中访问数据层。然而 dataLayer 不是一个 (JSON) 对象,它是一个对象数组。因此,您无法通过点表示法来寻址电子商务数据,您需要给出 dataLayer 数组元素的索引:

dataLayer[index].ecommerce.promoView.promotions

其中“index”是包含电子商务数据的 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(); 
}

未经正确测试,因此该功能可能需要调整,但基本上这就是正确的方法。

关于javascript - 谷歌标签管理器变量数据层自定义javascript未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42368814/

相关文章:

javascript - PHP、jQuery 和 Ajax 历史

javascript - windows.onload vs resize 不同的宽度

javascript - For Loop 在 Google 跟踪代码管理器的自定义 javascript 变量中不起作用

google-analytics - Firebase+GTM SDK - 访问 GA 跟踪器客户端 ID

javascript - 如何使用 javascript 从 dataLayer 读取信息?

php - 业务层、数据层,哪里放查询?

javascript - Typescript "Element implicitly has an ' any' 类型,因为类型 'Rank' 的表达式不能用于索引类型 'IPowerCards' "

google-analytics - GTM - 在自定义 html 标记中获取 href 值

asp.net-mvc - MVC 4-在数据层中使用WCF

javascript - jQuery 中用于过滤结果的复选框