JavaScript中Ajax请求URL传递多参数实现及调用报错解决
错误原因
你的代码触发错误主要有两个明确问题:
- 函数调用语法错误:调用
request时括号位置错误,将两个入参和后续的.done()调用包裹在同一层括号内,JS引擎无法正确解析参数传递逻辑和Promise链式调用规则 - 手动拼接URL存在两个隐患:一是代码里的
&是HTML转义字符,在JS字符串中需要直接写&,否则会被识别为参数值的一部分;二是未对参数值做编码处理,参数携带特殊字符时会导致URL格式非法
推荐实现(无需手动拼接URL)
jQuery的$.ajax对GET请求做了参数自动处理,不需要手动在URL后拼接查询串,把所有参数放到data字段即可,框架会自动完成拼接、特殊字符转义工作,稳定性更高:
function request(time, clientId) { return $.ajax({ url: 'https://myURL/api/v1/get-infoDevices', type: 'GET', dataType: 'json', data: { value: 'Logs', duration: 86400000, time: time, ID: clientId } }); }
说明:GET请求不需要设置
contentType: 'application/json',这个配置是给POST请求传递JSON请求体用的,加了反而可能触发不必要的跨域预检请求。
手动拼接URL的修正写法
如果需要手动拼接URL,需要对参数值做URL编码,同时替换错误的转义字符:
function request(time, clientId) { return $.ajax({ url: `https://myURL/api/v1/get-infoDevices?value=Logs&duration=86400000&time=${encodeURIComponent(time)}&ID=${encodeURIComponent(clientId)}`, type: 'GET', dataType: 'json' }); }
正确的调用写法
修正括号位置,两个参数按顺序传入request函数,函数调用闭合后再接.done()回调:
request(input.dashboard.time, input.ctx.clientId).done((res) => { // 此处写请求成功后的业务逻辑 console.log(res) })
内容的提问来源于stack exchange,提问作者gabreuneto
相关产品推荐
相关产品推荐

