js~ajax獲取后端HTTP狀態(tai)的幾種情況(kuang)
jquery發起(qi)ajax請求(qiu)到后(hou)(hou)端(duan)接(jie)(jie)口,后(hou)(hou)端(duan)向(xiang)前端(duan)返回數(shu)據,當然(ran)也存在后(hou)(hou)端(duan)接(jie)(jie)口直接(jie)(jie)重(zhong)定(ding)向(xiang)(302)到其它接(jie)(jie)口,然(ran)后(hou)(hou)再向(xiang)前端(duan)返回數(shu)據,當然(ran)這種情況需(xu)要考慮跨域問題(ti)。
前端代碼
//測試一下http status
$.ajax({
type: "get",
url: "/redirect",
statusCode: {
401: function () {
console.log("401");
},
404: function () {
console.log("404");
},
200: function () {
console.log("200");
},
302: function () {
// 獲取不到當前頁的狀態,因為已經跳轉,直接為目標頁的狀態
// 目標頁返回是404,則前端接收就是404,當然如果目標頁存在跨域的情況,那前端是沒有狀態返回的
console.log("302");
}
}
});
后端請求
一 正常返回
如果只是(shi)后端接口(kou)直接返回數據,就使用(yong)后端接口(kou)狀態(tai),可能(neng)是(shi)200,400,401,403,500等
二 重定向
1 如果是(shi)同源(yuan)(域(yu))情況,直接(jie)(jie)返回重定向接(jie)(jie)口的狀態碼,下面例(li)子中重定向到/a404接(jie)(jie)口,這個接(jie)(jie)口返回狀態碼是(shi)404,前(qian)端得到的響(xiang)應碼就是(shi)404
@GetMapping("/redirect")
public void rerei(HttpServletRequest request, HttpServletResponse response) {
response.sendRedirect("//localhost:9090/a404");
}
@GetMapping("/a404")
public void a404(HttpServletResponse response){
response.setStatus(404);
}
2 如(ru)果是跨域(yu)情(qing)況,如(ru)果目標接(jie)口(kou)的(de)服務端(duan)沒(mei)有開啟跨域(yu)策略,則不能返(fan)回狀(zhuang)態
@GetMapping("/redirect")
public void rerei(HttpServletRequest request, HttpServletResponse response) {
response.sendRedirect("//www.baidu.com");
}

這種(zhong)情況的話(hua),前(qian)端無法得到HTTP響應碼,這只能在后端去(qu)處理,在前(qian)后分離的狀態里,盡量不要在后端直(zhi)接(jie)重(zhong)定向(xiang),而是輸出對應的響應結果(guo),由前(qian)端完(wan)成重(zhong)定向(xiang)工(gong)作。