前提・実現したいこと
ajax通信を行うボタンを押下
↓
JavaScriptでサーバ側のセッションをチェックする
↓
セッションが切れていればajax通信を中断し、ログイン画面に遷移する
発生している問題・エラーメッセージ
ajaxでサーバ側のメソッドを呼び出して、セッションの情報を取得し、ログイン画面に遷移するようにはできました。
しかし、中断したい処理が動いてしまいます。
該当のソースコード
JavaScript
1//変数 2var timeoutFlg = 0; 3var jqXHR = new XMLHttpRequest; 4 5//ログインチェック 6function loginCheck() { 7 8 $.ajaxSetup({ 9 cache: false, 10 ifModified: true, 11 global: true // ajaxイベントをglobalで受け取る 12 }); 13 //ajax通信が始まった際に発火 14 $(document).ajaxStart(function () { 15 16 if (title !== "ログイン") { 17 //サーバ側のセッションをチェック 18 $.ajax( 19 { 20 type: 'POST', 21 url: '../LoginCheck', 22 async: false, 23 data: JSON, 24 success: function (data) { 25 //セッションが切れている場合 26 if (!data && timeoutFlg === 0) { 27 //フラグを立てる 28 timeoutFlg = 1; 29 //メッセージを出力し、ログイン画面に遷移 30 alert("タイムアウトしました。再度ログインしてください。"); 31 var form = document.createElement('form'); 32 form.setAttribute('action', '../Login'); 33 form.setAttribute('method', 'GET'); 34 form.style.display = 'none'; 35 // documentのBody部へ組み込ませる。 36 document.body.appendChild(form); 37 // submit送信 38 form.submit(); 39 } else { 40 timeoutFlg = 0; 41 } 42 } 43 }); 44 } 45 }); 46} 47 48//送信処理 49$('#Popup').dialog({ 50 modal: true, 51 width: 500, 52 height: 200, 53 title: '○○', 54 buttons: { 55 '○○': function () { 56 //ログインチェック実施 57 loginCheck(); 58 59 //セッションタイムアウトなら中断 60 if (timeoutFlg === 1) { 61 jqXHR.abort; 62 return false; 63 } 64 65 else { 66 jqXHR = $.ajax( 67 { 68 type: 'POST', 69 url: '../Req', 70 data: $('form').serialize(), 71 72 success: function (data) { 73 74 var result = data.Result; 75 var message = data.Message; 76 var redirectToUrl = "../△△"; 77 78 // メッセージを表示 79 alert(message); 80 81 // 異常終了の場合、処理を終了する 82 if (result === INT_RESULT_ERROR) { 83 return; 84 } 85 86 // ダイアログを閉じる 87 $('#Popup').dialog('close'); 88 89 // 画面遷移する 90 window.location.href = redirectToUrl; 91 }, 92 // サーバとの処理が失敗して処理が返ってきた後に実行するメソッド(error) 93 error: function (err) { 94 alert('error'); 95 return; 96 } 97 }); 98 99 } 100 }, 101 'キャンセル': function () { 102 // ダイアログを閉じる 103 $(this).dialog('close'); 104 } 105 } 106}); 107
試したこと
上記のように、ajax通信が始まった際に先にログインチェックを行い、timeoutFlgで下の処理をコントロールしようとしましたが、ダメでした。
画面遷移はしますが、下の送信処理は行われてしまいます。
DeveloperToolでデバッグを行ってみると、一度下の処理もリクエストが行われた後に、ajaxStartに入っているログインチェックが働いているようです。
どなたかお知恵をお貸しください。
補足情報(FW/ツールのバージョンなど)
VisualStadio2017
jQuery-3.2-1.js
※追記情報
ASP.NET MVC
.NET Framework 4.7.2
回答3件
あなたの回答
tips
プレビュー