如何设置名称中带点的上下文变量?

How to set a context variable with dot in name?

我正在尝试添加一个上下文数据变量 (CDV),它的名称中有一个点。根据 Adobe site 这是正确的:

s.contextData['myco.rsid'] = 'value'

不幸的是,在调用 s.t() 之后变量被分成两个或更多:

Context Variables
myco.:  
rsid: value 
.myco:  

如何设置变量并防止将其拆分成多个部分?

您已经正确设置了它。如果您指的是您在请求 URL 中看到的内容,这就是 Adob​​e 库发送它的方式。在您的示例中, "myco" 是一个命名空间, "rsid" 是该命名空间中的一个变量。您可以在该名称空间中拥有其他变量。例如,如果您有

s.contextData['myco.rsid1'] = 'value';
s.contextData['myco.rsid2'] = 'value';

您会在 AA 请求中看到 URL(仅显示相关部分):

c.&myco.&rsid1=value&rsid2=value&.myco&.c

我假设你问是因为你想更容易地从浏览器网络选项卡、扩展程序或某些单元测试器中 parse/qa AA 收集请求 URLs?在变量中使用点语法(名称空间)时,无法强制 AA 不这样做。

但是,为您的 contextData 变量使用命名空间并没有什么特别之处;如果您愿意,它只适用于您自己的组织。所以如果你希望所有变量都是 "top level" 并且在请求中显示全名 URL,那么不要使用点语法。

如果你还想有一些 organization/hierarchy 的度量,我建议你改用下划线 _ :

s.contextData['myco_rsid1'] = 'value';
s.contextData['myco_rsid2'] = 'value';

哪个会给你:

c.&myco_rsid1=value&myco_rsid2=value&.c

旁注:不能s.contextData做完整的object/dot符号语法,例如

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]”。为什么 Adob​​e 不允许完整的对象语法而只允许 JSON.stringify(s.contextData)¯\_(ツ)_/¯