2014-03-19 36 views
1
Good morning people of stackoverflow :) 

我正在一個電子商務網站上工作。我們的一個跟蹤合作伙伴需要安裝名爲「csAdd」的 函數。該功能讀取客戶購物車,然後上傳信息。如何使用javascript從dataLayer中讀取信息?

我想在車中顯示每行的信息下面這個模板是什麼:

myTag.csAdd('Sku1', 
    'Sku1Quantity', 
    '', 
    'Sku1Quantity*ItemSinglePrice', 
    'ItemSinglePrice', 
''); 

同爲SKU2,SKU3等

結果*會如下:

<script> 
    myTag.csAdd('136340026', 
    '2', 
    '', 
    '90', 
    '45', 
''); 

    myTag.csAdd('774595138', 
    '1', 
    '', 
    '49.99', 
    '49.99', 
''); 

</script> 

請注意,一些單引號是空的,這不是錯誤,我們的跟蹤腳本需要空信息不存在的地方(例如物品成本不含增值稅)。

* 我的問題是:我不知道如何告訴JavaScript的「在車中的每個行,請通過csAdd發給我的信息」

所需的信息已經顯示在dataLayer,所以我認爲JavaScript「可以」讀取此:

<script> 
dataLayer = [{ 
    'pageTitle': 'BasketPage', 
    'basketId': '2241121', 
    'admincosts': '5,5', 
    'basketTotal': '145.49', 
    'basketProducts': [{ 
    'sku': '136340026', 
    'name': 'Jean', 
    'price': '90.00', 
    'quantity': '2' 
},{ 
    'sku': '774595138', 
    'name': 'Jacket', 
    'price': '49.99', 
    'quantity': '1' 
    }] 
}]; 
</script> 

但我該怎麼做?預先感謝您的時間和幫助。

回答

0

所以你有一個json對象的數組dataLayer,它包含屬性'basketProducts',它是一個數組。 您需要兩個for循環(每個數組一個)。 在第二個(嵌套)循環中,您調用myTag.cs​​Add()方法,將basketProducts [bProd]數組中的每個產品的所需屬性值傳遞給它。

for (var i = 0; i < dataLayer.length; i++) { 
    var bProd = dataLayer[i].basketProducts; 
    for (var j = 0; j < bProd.length; j++) { 
     myTag.csAdd(
        bProd[j].sku, 
        bProd[j].quantity, 
        '', 
        bProd[j].quantity * bProd[j].price, 
        bProd[j].price, 
        '' 
        ); 
    } 
} 
+2

請在您提供的商家信息中添加一些描述性文字。 – Matt

+0

謝謝你EchoSin,我會測試你的代碼片段,並隨時通知你:) – Bert

+0

不幸的是,這個代碼返回了「undefined」。但我認爲這是一個Google Tag Manager問題:我將您的代碼放在一個宏中,並且自定義js宏需要「函數」和「返回」語句才能工作。所以我將你的代碼集成到'function(blah){...};返回「blah」; }'和我的「未定義」結果出現在購物車源代碼中。 – Bert