2016-05-20 23 views
0

私はDatatables 1.10.5を使用しています。私はajaxエラーハンドラを定義しています。エラーが発生したときに実際のHTTPステータスコードにアクセスして、HTTP 500エラーなどのバックエンドに何か問題がある場合、ユーザーのセッション時間が期限切れになっているかどうかを確認できます(HTTP 401)。現在、techNoteは常に7です。Datatables 1.10.5 ajaxエラーハンドラ - httpステータスコードへのアクセスを取得する

どうすればわかりにくいHTTPステータスコードをajaxトランザクションから取得できますか?私は下で試したが、それは始動しない。

$("#example").ajaxError(function(event, jqxhr, request, settings){ 
    alert("Failure HTTP Code:"+jqxhr.status);  
}); 

$.fn.dataTable.ext.errMode = 'throw'; 
$('#example').on('error.dt', function(e, settings, techNote, message) { 
    console.log('An error has been reported by DataTables: ', message); 
}); 

は、私は必要な情報を持っていない、または少なくとも私は渡された変数のいずれかでそれを見つけることができません。

答えて

2

ハンドルxhrイベント。 Ajaxエラーが発生すると、3番目の引数jsonnullになり、4番目の引数xhrにはjQuery XHRオブジェクトが含まれます。ステータスはxhr.statusプロパティにアクセスして取得できます。

また、アラートを表示しないようにDataTablesに指示するために使用できる$.fn.dataTable.ext.errModeも参照してください。

+0

に定義何も前に実行するので、あなたはまだ$.fn.dataTable.ext.errModeをオーバーライドする必要があります残念ながら、$( "#例")ajaxError(機能(イベント、jqxhr、要求、設定){ \t \t場合(jqxhr.statusの== 500)警報( "サーバーサイドのエラーが発生しました"); \t \t}); 1.10.5では動作しません。私は新しいハンドラを動作させるように思えるだけです。 – user3670534

+0

私はxhrイベントを使用し、それは完全に働いた。どうもありがとうございます! – user3670534

0
私は機能してDataTableの $.fn.dataTable.ext.errModeに、より具体的にオーバーライドすることにより、グローバルなjQueryの ajaxErrorを上書きせずにステータスコードへのアクセスを得ることができました

$.fn.dataTable.ext.errMode = function (settings, tn, msg) { 
     if (settings && settings.jqXHR && settings.jqXHR.status == 401) { 
      window.location = window.location.origin + '/login'; 
      return 
     } 
     alert(msg) // Alert for all other error types; default DataTables behavior 
    }; 

この例401の状況にログインするためのリダイレクトを示ししかし、他のステータスコードでも同じことができます。

最終メモは、ステータス・コードの特定の処理のためのDataTable statusCodeオプションを活用することができますですが、あなたは、デフォルトのエラー処理をバイパスしたい場合、それはあなたがstatusCode

関連する問題