我在JS里面寫了個Ajax,傳值給控制器,然后利用request.getRequestDispatcher(),打算跳轉至另外一個頁面。但是沒有跳轉成功,運行之后沒反應。
在網上搜了資料發現,利用ajax的請求時無法利用equest.getRequestDispatcher()跳轉。所以可以考慮換一種方式進行跳轉。
在Ajax請求下response.sendRedirect()同樣無法進行跳轉。原理如下:
Ajax的原理簡單來說,實際上就是通過XmlHttpRequest對象來向服務器發異步請求,從服務器獲得數據,然后用javascript來操作DOM而更新頁面。
這其中最關鍵的一步就是從服務器獲得請求數據。要清楚這個過程和原理,我們必須對 XMLHttpRequest有所了解。
我們可以看出,XMLHttpRequest對象完全用來向服務器發出一個請求的,它的作用也局限於此,但它的作用是整個ajax實現的關鍵,我們可以把服務器端看成一個數據接口,它返回的是一個純文本流,當然,這個文本流可以是XML格式,可以是Html,可以是Javascript代碼,也可以只是一個字符串。這時候,XMLHttpRequest向服務器端請求這個頁面,服務器端將文本的結果寫入頁面,這和普通的web開發流程是一樣的,不同的是,客戶端在異步獲取這個結果后,不是直接顯示在頁面,而是先由javascript來處理,然后再顯示在頁面。
最后采用下面的方式實現
@RequestMapping(value = "/login", method = RequestMethod.POST)
public void Login(HttpServletRequest request,
HttpServletResponse response,
LcbUser user) throws Exception {
try {
LcbUser currentUser = userService.checkLogin(user.getLoginName(), user.getPassWord());
boolean flag=false;
if (user.getLoginName() != null && user.getPassWord() != null) {
//創建session對象
HttpSession session = request.getSession();
//把用戶數據保存在session域對象中
if(currentUser==null){
flag=false;
}
else {
session.setAttribute("currentUser", currentUser.getUserName());
session.setAttribute("userId", currentUser.getUserId());
//跳轉到用戶主頁
// model.addAttribute(currentUser);
// model.addAttribute("currentUser", currentUser.getUserName());
//RequestDispatcher rd = request.getRequestDispatcher("wel.jsp");
//rd.forward(request, response);
flag=true;
}
} else {
flag=false;
}
PrintWriter out = response.getWriter();
out.print(flag);//返回登錄信息
out.flush();
out.close();
} catch (Exception e) {
throw new Exception(e);
}
}
function checkLogin() {
// var form = new FormData(document.getElementById("user"));
var loginName=$("#loginName").val();
var passWord=$("#passWord").val();
if(loginName == ""){
alert("請輸入用戶名");
return false;
}else if(passWord == ""){
alert("請輸入密碼");
return false;
}
var data={loginName:loginName,passWord:passWord};
$.ajax({
async: true,
dataType:"json",
type: 'post',
url: "<%=basePath%>login",
data: data,
success: function (result) {
if(result==true){
window.location.href="${blog}/views/Home/Index.jsp";
}else {
alert("用戶名或密碼錯誤!請聯系管理員獲取密碼")
};
// alert("修改成功");
}
});
}
簡單記錄一下。