我需要帮助在数据层编写自定义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(); }
任何人都可以提供帮助。提前谢谢。
答案 0 :(得分:3)
我猜您正试图直接从自定义函数中访问dataLayer。但是dataLayer不是(JSON)对象,它是对象的数组。因此,您无法通过点表示法来处理电子商务数据,您需要提供dataLayer数组元素的索引:
dataLayer[index].ecommerce.promoView.promotions
其中"索引"是包含电子商务数据的dataLayer元素的索引。现在显然会很糟糕(特别是因为索引可能并不总是相同,这取决于你按什么顺序推送到dataLayer),所以有更好的方法。
在其内部数据模型中(不可避免的Simo Ahava has written a lot about this)GTM将dataLayer元素展平为单个对象。您不会直接访问此数据模型,而是使用dataLayer类型的变量:
现在在自定义函数中使用它:
function() {
var names = [];
for (promotion in promotions) {
names.push(promotions[promotion].name);
}
return names.join();
}
未经过适当测试,因此该功能可能需要进行调整,但基本上就是这样。