ajax請求是局部刷新頁面,所以在發送ajax請求后返回的內容會刷新頁面中的局部,而不會進行頁面跳轉,
即使使用重定向,也會將重定向后返回的內容刷新在原頁面的局部(在F12的Network中可以查看請求的response返回的內容)
如:
1.在進行登陸時:
如果登錄失敗時需要在原頁面局部顯示錯誤信息,因此需要使用ajax請求
如果登陸成功則跳轉到某個頁面,此時使用ajax請求則無法實現跳轉新頁面的功能
2.在添加新內容時:
如果有異常信息則需要在原頁面提醒,需使用ajax請求
如果添加成功則可能需要跳轉到列表頁面
解決方法:
使用 location.href='請求路徑' 家族
具體實現如:
前端:
1 $.ajax({ 2 url:'/handle_login', 3 data:$('#form-login').serialize(), 4 type:'post', 5 dataType:'json', 6 success:function (json) { 7 if(json.state==2000){ 8 // 注意:此處的index是Controller層的請求路徑, 9 // 由於在此例子中index頁面是需要使用模板引擎解析的,所以需要使用Controller進行跳轉
2000為請求成功狀態碼 11 window.location.href="/index"; 12 }else{ 13 formLogin.message=json.message; 14 } 15 } 16 });
后端:只需要返回一個json對象,其中的state表示狀態碼,上述例子中state為2000時表示成功
1 @RequestMapping("handle_login") 2 @ResponseBody 3 public JsonResult<Void> handleLogin(String phone, String password, String remember, 4 HttpServletRequest request, HttpServletResponse response) { 5 userService.loginUser(phone, password, remember, request, response); 6 return JsonResult.ok(); 7 }
此處的JsonResult是用於創建返回數據對象的類,ok是一個靜態方法,表示操作成功,state為2000
提示:前述中使用了家族這個詞匯,原因是可以用於跳轉的不僅僅window.location.href(location.href),
還有top.location.href、parent.location.href等實現,甚至還有open方法打開新頁面,
其區別參考:https://www.cnblogs.com/xiao-lin-unit/p/13727116.html