jQuery AJAX请求使用相对URL未包含路径ID的问题及解决咨询
相对路径丢失ID的原因
浏览器解析相对路径有固定规则:
- 若当前页面URL末尾没有斜杠,浏览器会把最后一段路径判定为文件名,拼接相对路径时会直接替换这段文件名
- 若当前页面URL末尾带有斜杠,最后一段路径会被判定为目录,相对路径会拼接在该目录之后
你当前访问的页面地址是/Question/100,末尾无斜杠,因此100会被识别为文件名,拼接AddComment时会直接替换100,最终得到/Question/AddComment,这就是ID丢失的根本原因。如果页面地址是/Question/100/(末尾带斜杠),原有相对路径写法就会直接得到你需要的/Question/100/AddComment。
无需使用window.location.href的解决方案
方案1:后端注入ID拼接绝对路径
如果是服务端渲染的页面,直接在页面输出当前问题的ID到JS变量,请求时拼接绝对路径即可,该方案完全不受URL格式影响,稳定性最高:
// 后端渲染时直接将实际ID输出到页面,比如PHP可以写为const questionId = <?=$id?>; const questionId = 100; $.ajax({ url: `/Question/${questionId}/AddComment`, type: 'POST' });
方案2:服务端配置URL补全斜杠
调整服务端规则,访问/Question/[ID]格式的地址时,自动301重定向到/Question/[ID]/(末尾补斜杠),让浏览器将ID段识别为目录,此时你原有的url: 'AddComment'写法就可以正常生效,不需要修改任何前端代码。
内容的提问来源于stack exchange,提问作者zamsler
相关产品推荐
相关产品推荐

