bbbloodbutterfly
阿库娅学Java
采纳率100%
2020-10-18 22:56

Ajax请求时url自动多加了一级请求路径导致404错误

萌新在练习ajax时候遇到的问题
一 Controller代码

@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/login")
public String login()
{
return "login";
}
@RequestMapping("/login1")
@ResponseBody
public User login1()
{
User user=new User(10,"小红","123","女","123");
return user;
}
}
方法login用来跳转页面,方法login1用来ajax请求返回的数据

二 页面index.html能够顺利进行ajax请求,当跳转到页面login.html后,login页面点击按钮进行ajax请求时,url自动加上了上一级路径,解决不了,换成绝对路径能够成功。
index.html

跳转

function a(){ $.ajax({ url:'user/login1', success:function (data) { console.log(data) }, dataType:"JSON", type:'Post', cache:false }) }

login.html

function a(){ $.ajax({ url:'user/login1', success:function (data) { console.log(data) }, dataType:"JSON", type:'Post', cache:false }) }

跳转页面后login.html的地址http://localhost:8080/SSM_6_war_exploded/user/login
login.html进行ajax请求url变为http://localhost:8080/SSM_6_war_exploded/user/user/login1

多了一个user该如何解决

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • storm1979 storm_huang 6月前

    url改成url:'login1'。注意用的是相对路径,是以当前访问URL相对的。如果想其他地方复用,可以用绝对地址。

    点赞 评论 复制链接分享
  • qq_42235984 _YuLF 6月前

    您可以自己写一个ServletContextListener 在项目启动时,获取绝对路径并存入ServletContext,在页面请求时引用${absolutePath}+/请求路径

    public class InitializeServletContextListener implements ServletContextListener {
        public void contextInitialized(ServletContextEvent servletContextEvent) {
            //初始化项目绝对路径
            ServletContext servletContext = servletContextEvent.getServletContext();
            servletContext.setAttribute("absolutePath" , servletContext.getContextPath());
            System.out.println("启动时路径:"+servletContext.getAttribute("absolutePath"));
        }
    
        public void contextDestroyed(ServletContextEvent servletContextEvent) {
        }
    }
    

    或者在前端定义一个绝对路径的常量js文件,需要的时候直接引用就行,ProPath.projectPath + "/" + 请求路径

    ProPath = {
        projectPath: "/项目绝对路径",
        jsPath: "/asset/res/js",
        cssPath: "/asset/res/css",
        imgPath: "/asset/res/images"
    };
    

    推荐不要使用相对路径,我经常从Git上面下代码下来运行。运行完成由于我上下文设置的问题,总是导致一大堆css、js找不到的问题,就一个绝对路径问题,项目是绝对路径,动态的获取就不会出现,真是头疼

    点赞 评论 复制链接分享
  • qq_36911145 封印di恶魔 6月前

    相对路径不是根据根路径,而是根据当前页面的路径去拼接的

    点赞 评论 复制链接分享