メンチカツ

ロースカツが好きです

jQuery ajaxのレスポンスステータスが302のときに対応する

f:id:easy-breezy:20180319173817j:plain こんにちは! anguler,redux(on SPA)のプロダクトを経て、今月は訳あってjQuery(on MVC)を書いています。 久々の記述形式に戸惑いが多いですが、頑張っていきましょう。

認証が必要な環境下で、ajaxjsonを取得するとき、認証のセッションが切れていることがあります。

$.ajax({
  type: "GET",
  url: "/users"
})
.done(function(response, status, xhr){ 
  //responseにはjsonで欲しい値が返却される
  //が、セッションが切れてるとリダイレクト後のログイン画面が返却される
});

リダイレクト後のログイン画面が返却された場合もステータスコードは302でなく200になるので、レスポンスヘッダーの content-type を見て判断すると良いようです。

jquery how to check response type for ajax call - Stack Overflow

$.ajax({
  type: "GET",
  url: "/users"
})
.done(function(response, status, xhr){ 
  var ct = xhr.getResponseHeader("content-type") || "";
  if (ct.indexOf('html') > -1) {
    //どうやらログアウトしているらしい。
  }
  if (ct.indexOf('json') > -1) {
    //本来欲しかった返却値
  } 
});