我正在尝试添加上下文数据变量(CDV),其名称中带有一个点。根据{{3}},这是正确的:
s.contextData['myco.rsid'] = 'value'
不幸的是,在调用s.t()
之后,该变量被分为两个或多个:
Context Variables
myco.:
rsid: value
.myco:
如何设置变量并防止将其拆分成多个部分?
答案 0 :(得分:2)
您已经正确设置了。如果您指的是在请求URL中看到的内容,那就是Adobe库发送它的方式。在您的示例中,“ myco”是一个名称空间,而“ rsid”是该名称空间中的变量。您可以在该命名空间中包含其他变量。例如,如果您有
s.contextData['myco.rsid1'] = 'value';
s.contextData['myco.rsid2'] = 'value';
您会在AA请求网址中看到(仅显示相关部分):
c.&myco.&rsid1=value&rsid2=value&.myco&.c
我假设您是在问,因为您想更轻松地从浏览器网络标签,扩展程序或某些单元测试器中解析/确认AA收集请求网址?当在变量中使用点语法(命名空间)时,没有办法强制AA不能表现出这种行为。
但是,对于contextData
变量使用名称空间并没有什么特别的地方。如果您选择,它就在您自己的组织中。因此,如果您希望所有变量都是“顶级”变量,并在请求URL中显示全名,则不要使用点语法。
如果您仍然希望对组织/层次结构有所了解,建议您使用下划线_
:
s.contextData['myco_rsid1'] = 'value';
s.contextData['myco_rsid2'] = 'value';
哪个会给你:
c.&myco_rsid1=value&myco_rsid2=value&.c
侧面注::您不能使用s.contextData
做完整的对象/点表示法语法,例如
s.contextData = {
foo:'bar', // <--- this will properly parse
myco:{ // this will not properly parse
rsid:'value' //
} //
};
AA库无法正确解析它;它仅在构建请求URL时循环遍历contextData
的顶级属性。因此,如果您像上面那样使用完整的对象语法,则最终会得到:
c.&foo=bar&myco=%5Bobject%20Object%5D&&.c
foo
可以,但是最后只剩下myco
,并以“ [object Object]”作为记录值。为什么Adobe不允许完整的对象语法,而只允许JSON.stringify(s.contextData)
? ¯\_(ツ)_/¯