将jQuery PUT请求转为Axios时无服务器响应,请求排查问题
解决Axios替代jQuery发送PUT请求无响应的问题
我帮你排查了代码里的问题,这就给你梳理清楚怎么修复:
先明确原jQuery请求的核心逻辑
你的jQuery代码里,虽然指定了dataType: "json",但jQuery会自动帮你处理请求头——当传入字符串化的JSON时,它会自动设置Content-Type: application/json,而且请求的结构、编码逻辑都是能被后端识别的。
你的Axios代码存在的问题
有两个关键错误导致服务器无响应:
- URL配置错误:你把请求地址直接丢在了配置对象末尾,没有放到
url属性里,Axios根本不知道要请求哪个地址 - 响应字段判断错误:服务器返回的是
successful字段,但你在then里判断的是response.success,字段名不匹配
修正后的Axios代码
// 保留你原有的数据构建与编码逻辑 let signupInfo = {}; signupInfo.account = { type: 'affiliate' }; signupInfo.user = { userName: 'some_name' }; signupInfo.siteId = 'aqterm'; signupInfo.request = 'availability'; signupInfo.type = 'affiliate'; signupInfo.mode = 'affiliate'; let packagedSignUpInfoData = base64encode(JSON.stringify(signupInfo)); const thePackageObject = { "params": { "data": packagedSignUpInfoData } }; let packagedData = JSON.stringify(thePackageObject); // 修正后的Axios请求配置 const options = { method: 'PUT', url: "https://somedomain.com/aqmprocess", // 将URL放到正确的配置属性中 headers: { 'content-type': 'application/json' }, data: packagedData }; axios(options) .then(function(response) { // 注意服务器返回的是`successful`字段,且Axios的响应数据在response.data中 if (response.data.successful === true) { console.log(response.data); return response.data.token; // 若返回结果包含token则返回,可按需调整 } else if (response.data.successful === false) { console.log("表单错误:", response.data); } }) .catch(function(error) { console.error("请求出错:", error); });
额外排查建议
- 确保
base64encode函数的编码逻辑和原jQuery代码完全一致,否则后端可能无法解析数据 - 如果还是无响应,打开浏览器开发者工具的Network标签,对比jQuery请求和Axios请求的请求头、请求体是否完全一致,这是排查这类问题最直接的方法
- 记住:Axios的响应对象里,服务器返回的实际数据在
response.data中,和jQuery直接返回响应数据的方式不同,别搞混了
内容的提问来源于stack exchange,提问作者Frank Decker
相关产品推荐
相关产品推荐

