首頁  >  文章  >  web前端  >  ajax與302響應代碼測試_JavaScript

ajax與302響應代碼測試_JavaScript

WBOY
WBOY原創
2016-05-16 17:19:091155瀏覽

在ajax請求中,如果伺服器端的回應是302 Found,在ajax的回呼函數中能夠取得這個狀態碼嗎?能夠從Response Headers中得到Location的值進行重定向嗎?讓我們來一起看看實際情況。
使用jquery的$.ajax()啟動ajax請求的javascript程式碼如下:

複製程式碼 程式碼:
複製程式碼


程式碼
複製碼>

$.ajax({
    url: '/oauth/respond',
    type: 'post',
    data: data,

        console.log(jqXHR.status);
    },
   error: function (xhr) {
    🎜>});

ajax與302響應代碼測試_JavaScript
 
當伺服器端回傳302 Found的回應時,瀏覽器中的運作結果如下:



在ajax的complete()與error()回呼函數中得到的狀態碼都是404,而不是302。
這是為什麼呢?

在stackoverflow上找到了複製程式碼

複製程式碼


複製程式碼

複製碼🎜>You can't handle redirects with XHR callbacks because the browser takes care of them automatically. You will only get back what at the redirected location.

jax -> browser -> server -> 302 -> browser(redirect) -> server -> browser -> ajax callback
而在我們的測試程序中,由於302返回的重定向URL在伺服器上沒有對應的處理程序,所以在ajax回呼函數中得到的是404狀態碼;如果存在對應的URL,得到的狀態碼就是200。
所以,如果你想在ajax請求中根據302回應透過location.href進行重定向是不可行的。

如何解決? 方法一繼續用ajax,修改伺服器端程式碼,將原來的302回應改為json回應,例如下面的ASP.NET MVC範例程式碼:


複製程式碼

程式碼如下:return Json(new { status = 302, location = "/oauth/respond" }) ;ajax程式碼稍作修改即可:



複製程式碼


程式碼
複製程式碼


程式碼

$.ajax({    url: '/oauth/respond',

    type: 'post',    data: data,
data: ' >    success: function (data) {
        if (data.status == 302) {
           }

}); 方法二
不用ajax,改用form。



複製程式碼
程式碼如下:
以前沒研究透這個問題,踩了幾次坑。這次研究了一下,我想以後就會遠離這個坑了。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn