AMP extraUrlParams内部传参:如何将字符串数据转为数字格式
解决AMP extraUrlParams发送数字格式数据的问题
我懂你现在的困扰:用AMP Analytics的extraUrlParams传递数据时,哪怕navTiming返回的是数字结果,最终都会被转成字符串格式(比如{ wt: "83" }),但服务器要求的是纯数字格式{ wt: 83 }。这是因为AMP默认会把extraUrlParams里的所有参数值都序列化为字符串,不管原始类型是什么。
下面给你两个可行的解决方案:
方案一:通过变量运算强制保留数字类型
你可以在vars里对navTiming的结果做一次简单的数字运算(比如乘以1),确保变量保持数字类型,再传递给extraUrlParams:
<script type="application/json"> { "requests":{ "pageview":"https://example.com" }, "triggers":{ "trackPageview":{ "on":"visible", "request":"pageview" } }, "vars":{ "dns":"${navTiming(requestStart,responseStart)}", "wt": "${navTiming(requestStart,responseStart) * 1}" }, "transport":{ "beacon":false, "xhrpost":true, "image":false, "useBody":true }, "extraUrlParams":{ "wt":"${wt}" } } </script>
通过* 1的运算,wt变量会被强制处理为数字类型,当useBody:true时,AMP会以数字格式序列化这个参数。
方案二:自定义请求体模板(更可靠)
如果方案一不生效,你可以直接放弃extraUrlParams,改用自定义请求体的方式构造JSON,这样能完全控制参数的类型:
<script type="application/json"> { "requests":{ "pageview":"https://example.com/track" }, "triggers":{ "trackPageview":{ "on":"visible", "request":"pageview" } }, "vars":{ "dns":"${navTiming(requestStart,responseStart)}", "wt":"${navTiming(requestStart,responseStart)}" }, "transport":{ "beacon":false, "xhrpost":true, "image":false, "useBody":true, "body": "{\"wt\": {{wt}}, \"dns\": {{dns}} }" } } </script>
这里直接在transport的body字段里写JSON模板,用{{wt}}直接插入数字(没有引号包裹),这样发送的请求体里wt就是纯数字格式,完全符合服务器的要求。
这两种方案里,方案二更稳妥,因为它绕开了extraUrlParams的字符串序列化逻辑,直接控制请求体的结构。
内容的提问来源于stack exchange,提问作者Rakesh Kp
相关产品推荐
相关产品推荐

