如何在页面加载时将多个事件推送到Google Analytics分析?

问题描述

当我加载电子商务收据页面时,我试图对分析数据层进行两次推送。

我的问题是我只能参加两个事件之一。

我要在收据页面输出它:

<script>
    function trackEcommerce() {
        dataLayer.push({
            'event': 'checkout','ecommerce': {
                'checkout': {
                    'actionField': { 'step': 2 }
                }
            }
        });
    }
    dataLayer.push({
        'event' : 'purchaseEvent','ecommerce': {
            'purchase': {
                'actionField': {
                    'id': '@orderId','affiliation': 'Eldorado','revenue': '@OrderTotal.ToString("F",System.Globalization.CultureInfo.GetCultureInfo("en-GB"))','tax':'@VatTotal.ToString("F",'shipping': '@ShippingFee.ToString("F",System.Globalization.CultureInfo.GetCultureInfo("en-GB"))'
                    },'products': [
                    @foreach (var item in GetLoop("OrderLines"))
                    {
                        string productName = item.GetString("Ecom:Product.Name").Replace("\"","").Trim();
                        string productNumber = item.GetString("Ecom:Product.Number");
                        double orderLineUnitPrice = item.GetDouble("Ecom:Order:OrderLine.UnitPrice.PriceWithoutVAT.Value");
                        int orderLineQuantity = item.GetInteger("Ecom:Order:OrderLine.Quantity");
                        string brand = item.GetString("Ecom:Product:Field.Brands.Value");
                        var DwProduct = ProductService.GetProductById(item.GetString("Ecom:Order:OrderLine.ProductID"),item.GetString("Ecom:Order:OrderLine.ProductvariantID"),item.GetString("Ecom:Product.LanguageID"));
                        string category = DwProduct.DefaultGroup == null ? "" : DwProduct.DefaultGroup.Name;                        
                        <text>{
                            'name': '@productName','id': '@productNumber','price': '@orderLineUnitPrice.ToString("F",'brand': '@brand','category': '@category','quantity': @orderLineQuantity
                        },</text>
                    }
                ]
            }
        },'eventCallback': trackEcommerce()
    });
</script>

我尝试过以各种不同的方式格式化此代码。我已经使回调函数直接像下面那样调用第二个dataLayer push:

'eventCallback': function () {
            dataLayer.push({
                'event': 'checkout','ecommerce': {

                }
            });
        }

我还尝试仅连续输出两个dataLayer推送,而两次推送之间没有eventCallback或其他关系。

解决方法

最明显的是,您正在使用函数调用trackEcommerce()而不是引用类似'eventCallback': trackEcommerce的函数

但是,仅使用两次简单的后续推送就可以正常工作,并且更易于调试。

dataLayer.push({ 'event': 'checkout',... });
// ... 
dataLayer.push({ 'event': 'purchaseEvent',... })