Javascript错误“无法读取属性”

时间:2017-05-31 12:30:53

标签: javascript jquery google-analytics

  var dataLayer =[{
  'ecommerce': {
    'purchase': {
      'actionField': {
        'id': 'T12345',
        'affiliation': 'Online Store',
        'revenue': '35.43',
        'tax':'4.90',
        'shipping': '5.99',
        'coupon': 'SUMMER_SALE'
      }
    }
  }
}];

我正在尝试动态地将产品名称和价格添加到产品中。 这是代码:

$('.to-buy').click(function() {
    $('.sed').each(function() {
        var product_name = $(this).find('h5').text();
        var product_price = $(this).parent().siblings(".cost").text();
        dataLayer.ecommerce.purchase.products.push({
            "name" : product_name ,
            "price" :product_price
        }); 
    });
});

但我收到错误“Uncaught TypeError:无法读取未定义的属性'购买'”。 我期待datalayer如下:

 'ecommerce': {
    'purchase': {
      'actionField': {
        'id': 'T12345', 
        'affiliation': 'Online Store',
        'revenue': '35.43',
        'tax':'4.90',
        'shipping': '5.99',
        'coupon': 'SUMMER_SALE'
      },
      'products': [{
        'name': 'Triblend Android T-Shirt',
        'price': '15.25'
       },
       {
        'name': 'Donut Friday Scented T-Shirt',
        'price': '33.75',
       }]
    }
  }

接受任何帮助。谢谢。

2 个答案:

答案 0 :(得分:2)

您的dataLayer是一个数组,因此尝试访问数组的属性ecommerce会返回undefined。访问undefined的购买会引发异常。

改为使用dataLayer[0].ecommerce,或将dataLayer更改为如下对象:

 var dataLayer ={
  'ecommerce': {
    'purchase': {
      'actionField': {
        'id': 'T12345',
        'affiliation': 'Online Store',
        'revenue': '35.43',
        'tax':'4.90',
        'shipping': '5.99',
        'coupon': 'SUMMER_SALE'
      }
    }
  }
};

此外,您dataLayer.ecommerce.purchase.products.push正在访问products内部购买但我在您的dataLayer中看不到任何产品。

将属性products添加到dataLayer对象

var dataLayer ={
  'ecommerce': {
    'purchase': {
      'actionField': {
        'id': 'T12345',
        'affiliation': 'Online Store',
        'revenue': '35.43',
        'tax':'4.90',
        'shipping': '5.99',
        'coupon': 'SUMMER_SALE'
      },
      products:[] // Your are missing this
    }
  }
};

答案 1 :(得分:1)

有两个问题,第一个 dataLayer 是一个数组,因此您必须访问数据层的第一个元素。另一个是您必须在购买

中创建产品属性
dataLayer[0].ecommerce.purchase.products =[{
  "name":product_name ,
  "price" :product_price
 }];

OR

dataLayer[0].ecommerce.purchase.products =[];
dataLayer[0].ecommerce.purchase.products.push({
  "name":product_name ,
  "price" :product_price
 });

上述两个中的任何一个都必须工作