首頁  >  文章  >  Java  >  SpringBoot在有Ajax時不跳轉問題怎麼解決

SpringBoot在有Ajax時不跳轉問題怎麼解決

王林
王林轉載
2023-05-25 20:49:111177瀏覽

問題描述

最近在嘗試使用SpringBoot做一個後台管理系統,由於目前還沒有學會VUE,所以前端頁面採用的 thymeleaf ajax的模式。前兩天在開發登入頁的時候遇到了一個問題,登入之後按照正常流程應該是要在控制器裡跳到首頁的,但是我的登入頁死活不跳。控制器的邏輯也是沒有問題的

@Controller
class LoginController {
    @Resource
    lateinit var adminService: AdminService
    @RequestMapping("/login",method = [RequestMethod.POST])
    fun login(@RequestParam name:String,@RequestParam password:String):String?{
        val admin=adminService.login(name,password)
        return if (admin==null){
            ""
        }else{
        //一般情况下是可以直接渲染到main.html的,但是添加了Ajax之后跳转就会失效
            "main"
        }
    }
}

Ajax裡邊的邏輯

$.ajax({
    method: 'POST',
    url: 'http://localhost:8080/login',
    data: {
        name: $('[name="username"]').val(),
        password: $('[name="password"]').val()
    },
    success:function (r) {
        console.log(r)
    },
    error:function (result) {
        alert(result)
    }
})

控制台傳回的訊息

SpringBoot在有Ajax時不跳轉問題怎麼解決

解決方法

這裡先給出解決方法,至於原因會在最後說明。在控制器中新增一個mainPage方法,與main.html相對應,可解決問題。

@RequestMapping("/main")
fun mainPage():String{
    return "main"
}

然後再在Ajax的success回呼中呼叫這個控制器,完成跳轉。

success:function (r) {
    window.location.href="http://localhost:8080/main" rel="external nofollow" 
},

原因梳理

一開始以為是控制器寫的有問題,然後就各種修改控制器的配置,最後發現無論怎麼修改都沒有效果,並且發現如果在瀏覽器中直接呼叫main.html的控制器路徑也是沒有問題的,這種情況就想到會不會是Ajax那的問題了。為了驗證是不是Ajax的問題,在Ajax回呼成功的程式碼那裡打了個斷點,想看一下後台回傳的資料到底是個啥

SpringBoot在有Ajax時不跳轉問題怎麼解決

看到沒,控制器把整個main.html的頁面都回到Ajax裡了,也就是說,在使用Ajax的時候,SpringBoot的控制器並沒有進行頁面渲染,而是把目標頁面結構返回了,能跳轉才怪了。

以上是SpringBoot在有Ajax時不跳轉問題怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除