jQuery构造API请求JSON时如何校验URL参数并动态设置userid
条件控制请求体中userid字段的实现方案
要实现和PHP里isset($_GET['vendor'])完全对齐的逻辑,只需要分两步操作,不需要复杂的jQuery特殊写法:
第一步:先从当前URL中提取vendor参数值
用浏览器原生的URLSearchParamsAPI就能实现和PHP超全局变量一致的取参效果,不需要手动拼接字符串:
// 从当前页面URL的查询段中读取vendor参数,参数不存在时直接返回null const vendor = new URLSearchParams(window.location.search).get('vendor');
第二步:按条件把userid字段加入请求对象
两种常用的实现方式,选哪个都可以:
方式1:先建基础对象,再条件追加字段(最直观不容易出bug)
// 先把固定不变的请求参数全部定义成基础对象 const basePayload = { "token": ev.token.id, "shippingAddress": ev.shippingAddress, "payerName": ev.payerName, "payerEmail": ev.payerEmail, "payerPhone": ev.payerPhone, "amount": parseInt(amount), "currency": 'GBP', "narative": "ntjersey", "notes": "", "ccid": "52FE039A8B53" }; // 仅当检测到vendor参数存在时,才往对象里追加userid字段 if (vendor) { basePayload.userid = vendor; } // 最后把对象序列化后作为请求body传递 body: JSON.stringify(basePayload),
方式2:直接在原对象字面量里写条件判断(代码最紧凑)
用JS对象展开运算符实现条件注入,不需要额外拆出变量:
body: JSON.stringify({ "token": ev.token.id, "shippingAddress": ev.shippingAddress, "payerName": ev.payerName, "payerEmail": ev.payerEmail, "payerPhone": ev.payerPhone, "amount": parseInt(amount), "currency": 'GBP', "narative": "ntjersey", "notes": "", "ccid": "52FE039A8B53", // vendor存在时才注入userid字段,不存在就注入空对象不影响原有结构 ...(vendor ? { userid: vendor } : {}) }),
关键注意点
- 上面两种实现的效果和PHP的
isset($_GET['vendor'])逻辑完全一致:如果URL里没有vendor参数,最终序列化生成的JSON里根本不会出现userid字段,不会带冗余的"userid": null这类无效内容 - 如果你本身的需求是不管参数存不存在,都要在请求体里保留userid字段,只是参数不存在时值设为null,那直接把
userid: vendor写在固定对象里就行,不需要加任何条件判断 - 别偷懒写
userid: vendor || undefined这类代码:虽然JSON.stringify序列化时会自动忽略值为undefined的字段,最终效果和条件判断一致,但这种写法可读性很差,后续维护的人很难一眼看懂字段是按条件生成的
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

