關於SpringBoot在有Ajax時候不跳轉的問題解決
問題描述
最近在嘗試使用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) } })
控制臺返回的信息
解決方法
這裡先給出解決方法,至於原因會在最後說明。解決方法就是在控制器中新增一個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回調成功的代碼那裡打瞭個斷點,想看一下後臺返回來的數據到底是個啥
看到沒,控制器把整個main.html的頁面都返回到Ajax裡瞭,也就是說,在使用Ajax的時候,SpringBoot的控制器並沒有進行頁面渲染,而是把目標頁面結構返回瞭,能跳轉才怪瞭。
總結
到此這篇關於SpringBoot在有Ajax時候不跳轉問題解決的文章就介紹到這瞭,更多相關SpringBoot有Ajax不跳轉內容請搜索LevelAH以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持LevelAH!
推薦閱讀:
- SpringBoot 設置傳入參數非必要的操作
- 基於spring mvc請求controller訪問方式
- Java項目之java+springboot+ssm實現理財管理系統設計
- thymeleaf實現前後端數據交換的示例詳解
- Java 房屋租賃系統的實現流程