如何设置名称中带点的上下文变量?
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 中看到的内容,这就是 Adobe 库发送它的方式。在您的示例中, "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]”。为什么 Adobe 不允许完整的对象语法而只允许 JSON.stringify(s.contextData)
? ¯\_(ツ)_/¯
我正在尝试添加一个上下文数据变量 (CDV),它的名称中有一个点。根据 Adobe site 这是正确的:
s.contextData['myco.rsid'] = 'value'
不幸的是,在调用 s.t()
之后变量被分成两个或更多:
Context Variables
myco.:
rsid: value
.myco:
如何设置变量并防止将其拆分成多个部分?
您已经正确设置了它。如果您指的是您在请求 URL 中看到的内容,这就是 Adobe 库发送它的方式。在您的示例中, "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]”。为什么 Adobe 不允许完整的对象语法而只允许 JSON.stringify(s.contextData)
? ¯\_(ツ)_/¯