天天看點

js~ajax擷取後端HTTP狀态的幾種情況

jquery發起ajax請求到後端接口,後端向前端傳回資料,當然也存在後端接口直接重定向(302)到其它接口,然後再向前端傳回資料,當然這種情況需要考慮跨域問題。

前端代碼

//測試一下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");
                }
            }
        });
           

後端請求

一 正常傳回

如果隻是後端接口直接傳回資料,就使用後端接口狀态,可能是200,400,401,403,500等

二 重定向

1 如果是同源(域)情況,直接傳回重定向接口的狀态碼,下面例子中重定向到/a404接口,這個接口傳回狀态碼是404,前端得到的響應碼就是404

@GetMapping("/redirect")
    public void rerei(HttpServletRequest request, HttpServletResponse response) {
       response.sendRedirect("http://localhost:9090/a404");
    }
    @GetMapping("/a404")
    public void a404(HttpServletResponse response){
        response.setStatus(404);
    }
           

2 如果是跨域情況,如果目标接口的服務端沒有開啟跨域政策,則不能傳回狀态

@GetMapping("/redirect")
    public void rerei(HttpServletRequest request, HttpServletResponse response) {
       response.sendRedirect("http://www.baidu.com");
    }
           
js~ajax擷取後端HTTP狀态的幾種情況

這種情況的話,前端無法得到HTTP響應碼,這隻能在後端去處理,在前後分離的狀态裡,盡量不要在後端直接重定向,而是輸出對應的響應結果,由前端完成重定向工作。

作者:倉儲大叔,張占嶺,

榮譽:微軟MVP

QQ:853066980

支付寶掃一掃,為大叔打賞!

js~ajax擷取後端HTTP狀态的幾種情況