2017-08-14 81 views
0

我试图在发送GA单击事件时包含自定义维度列表。GA发送事件,不处理自定义尺寸

此代码:

ga('send', 'event', category, action, label, { 
    'hitCallback': function() { 
    //some code goes here 
    } 
}); 

但添加自定义维度时:

ga('send', 'event', category, action, label, customDimensions.dimensionsToSend, { 
    hitCallback': function() { 
     //some code 
    }, 
    'hitCallbackFail': function() { 
     alert("Unable to send Google Analytics data"); 
    } 
}); 

无论hitCallback也不hitCallbackFail被炒鱿鱼。 我在几个地方阅读(like here),我应该可以将自定义维度添加到GA发送事件函数,但也许我做错了什么。

回答

1

第二个代码块的问题是自定义尺寸没有被正确设置。您无法将自定义维度作为主要的ga()函数的进一步参数传递。相反,你需要通过他们通过fieldsObject(为你发送的最后一个参数对象的一部分),像这样:

ga('send', 'event', category, action, label, { 
    'dimension1': 'Some value', // Custom Dimension 1 
    'dimension2': 'Some value 2', // Custom Dimension 2 
    'hitCallback': function() { 
     //some code 
    } 
}); 

这是简写:

ga('send', { 
    'hitType': 'event', 
    'eventCategory': category, 
    'eventAction': action, 
    'eventLabel': label, 
    'dimension1': 'Some value', // Custom Dimension 1 
    'dimension2': 'Some value 2', // Custom Dimension 2 
    'hitCallback': function() { 
     //some code 
    } 
}); 

ga() command queue reference

还要注意hitCallbackFail不是有效字段;那不会因失败而被召唤。

查看list of available fields

事实上,您提供给hitCallback的功能无论您发送的匹配是否成功,或者Google Analytics是否拒绝了匹配,都会执行。只有在Google Analytics库未加载或服务器连接失败的情况下,才会执行的唯一时间。

如果您有要执行的代码,即使服务器发生故障,您也可以使用超时。从以上页面查看此示例:

// Use a timeout to ensure the execution of critical application code. 
ga('send', 'pageview', {'hitCallback': criticalCode}); 
setTimeout(criticalCode, 2000); 

// Only run the critical code once. 
var alreadyCalled = false; 
function criticalCode() { 
    if (alreadyCalled) return; 
    alreadyCalled = true; 

    // Run critical code here... 
} 
+0

感谢Colin.Your的回答很有帮助。我找到了这个问题的实际原因和解决方案。 由于customDimensions.dimensionsToSend是一个对象,因此根本不考虑包含hitCallback函数的下一个对象。 为了解决这个问题,我需要在customDimensions.dimensionsToSend对象中添加hitCallback函数。现在它正在工作。 谢谢 – user1351452

+0

只要'customDimensions.dimensionsToSend'包含正确的键(例如'dimension1'),这意味着您已经在调用中传递了'fieldsDimensions.dimensionsToSend'。哪个可以工作,但你可能想要清理你的对象的命名约定。 – colintemple