form和ajax的重定向
form提交表單或者window.location.href=".......",後臺直接response.sendRedirect是可以重定向的。
但是ajax的提交,後臺response.sendRedirect是不能重定向的。測試如下:
$.ajax({ url : "${base}/test/testAajaxRedirect", dataType : "json", async : false, success : function(data) { alert("succuess"); }, error: function(XMLHttpRequest, textStatus, errorThrown){ console.info(textStatus); console.info(errorThrown); console.info(XMLHttpRequest); } });
public void testAajaxRedirect(){
redirect("/admin/login");
}
然後頁面報錯:從報錯資訊的XMLHttpRequest我們能看出,其實它返回的是一個重定向的頁面,然後Ajax進行解析,因為不符合json格式所以報錯了。從這些能知道,後臺重定向之後,瀏覽器收到重定向要求,進行重定向,如果還有重定向要求,就再重定向,最終返回最後那個URL的東西,Ajax對這個進行解析。所以,Ajax的重定向不能是後臺直接重定向,而需要配合前端:後臺返回一個錯誤碼和要重定向的URL,要求重定向,然後頁面根據這個碼和URL進行重定向。