2017-02-21 2 views
0

Мне нужна помощь для написания пользовательского javascript в слое данных. Я пытаюсь получить имена.google tag manager переменный уровень данных пользовательский javascript undefined

promotionImpression:

{ 
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(); } 

Может кто-нибудь помочь в этом. Заранее спасибо.

+0

Когда вы вызываете эту пользовательскую переменную JS? Это должно быть на мероприятии «promoImp». – nyuen

ответ

3

Я думаю, вы пытаетесь получить доступ к DataLayer непосредственно из своей пользовательской функции. Однако dataLayer не является объектом (JSON), это массив объектов. Таким образом, вы не можете адресовать данные о транзакциях через точечную нотацию, вы должны были бы дать индекс элемента массива dataLayer:

dataLayer[index].ecommerce.promoView.promotions 

, где «индекс» является индексом элемента dataLayer, который содержит данные о транзакциях. Теперь ясно, что сосать (особенно потому, что индекс может быть не всегда одинаковым, в зависимости от того, что вы нажали в каком порядке для DataLayer), так что есть лучший способ.

В своей внутренней модели данных (inescapable 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(); 
} 

не надлежащим образом проверены, так что функция может нужна настройка, но в основном это будет способ пойти.

+0

Функция() { return Object.keys ({{Promotions}}). Сращивание (0, 3); } Этот код решил мою проблему. Спасибо вам за помощь – riyaz

Смежные вопросы