2017-02-21 92 views
0

我需要幫助寫數據層中的自定義JavaScript。我正在嘗試獲取姓名。谷歌標籤管理器可變數據層定製javascript undefined

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

你什麼時候調用這個自定義JS變量?它應該在「promoImp」事件上。 – nyuen

回答

3

我想你試圖直接從你的自定義函數訪問dataLayer。但dataLayer不是(JSON)對象,它是對象的數組。所以你不能滿足通過點符號的電子商務數據,你需要給數據層數組元素的索引:

dataLayer[index].ecommerce.promoView.promotions 

其中「指數」是包含電子商務數據的數據層元素的索引。現在很明顯,這將吸引(特別是因爲索引可能不總是相同的,這取決於你向dataLayer以什麼順序推送的內容),所以有一個更好的方法。

在它的內部數據模型(不可避免的Simo Ahava has written a lot about this)中,GTM將dataLayer元素變爲單個對象。你不會直接訪問這個數據模型,而不是使用數據層類型的變量:

enter image description here

現在使用您的自定義功能:

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

不正確的測試,所以功能可能需要調整,但基本上這是要走的路。

+0

function(){ return Object.keys({{Promotions}})。splice(0,3); }這段代碼解決了我的問題。感謝您的幫助 – riyaz

相關問題