-1

私のアプリは$.ajax頻繁に使用します。サーバーは{"STATUS":"RELOGIN"}、ログインの有効期限が切れた場合のようなものを返します。私たちのアプリは、ユーザーがアプリで 20 分間何もしないと、サーバーでログアウトが発生するようなものです。

すべての投稿と取得は $.ajax を介して行われ、 $.ajax 関数をグローバルに変更して、リクエストに対して返されたデータが発生した場合に{"STATUS":"RELOGIN"}ユーザーに何らかの通知が表示されるようにしたいと考えています。

これは、すべてのリクエストの成功ハンドラーとして置くことができます

function(data){
if(data.STATUS == "RELOGIN") {
    Notifier.show_error("Login again. Session has expired")
    return
}
// rest of the code depending on the request
}

Notifier通知を表示するために書いたものはどこにありますか

しかし、このコードをあまりにも多くの場所で複製することは良い考えではないと思います。

jquery のソース コードには触れたくありません。そのままで美しいです。

4

2 に答える 2

0

これは私の考えです(http://stackoverflow.com/questions/9815058/extending-jquery-ajax-success-globally):

var LOGIN_ERROR_HAS_HAPPENED = false
var INTERNAL_SERVER_ERRORS = false
$(function(){
    var Original_AJAX_function = $.ajax;
    $.ajax = function(options){
        if(options.success){
            var original_callback = options.success
        }
        else{
            var original_callback = function(){}
        }
        options.success = function(data){
            if(data.STATUS == "RELOGIN") {
                if(!LOGIN_ERROR_HAS_HAPPENED){
                    LOGIN_ERROR_HAS_HAPPENED = true
                    Notifier.warning("Login again. Redirecting to login page")
                    setTimeout(function(){
                        window.location.href = "/login"
                    }, 5000)
                }
                return
            }
            original_callback(data)
        }
        if(options.error){
            var original_failure_call_back = options.error
        }
        else{
            var original_failure_call_back = function(){}
        }
        options.error = function(data){
            if(!INTERNAL_SERVER_ERRORS||!LOGIN_ERROR_HAS_HAPPENED){
                INTERNAL_SERVER_ERRORS = true
                Notifier.warning("Oops! Something went wrong. Let us know and we will fix it" )
            }
            original_failure_call_back(data)
        }
        Original_AJAX_function(options)
    }
})

これは document.ready 関数の中に入れる予定です

于 2012-11-30T05:08:35.770 に答える
0

これを見てください:http://api.jquery.com/ajaxComplete/

グローバル ajax 完了ハンドラー (各 ajax 呼び出しが完了した後に呼び出される) を設定できます。$.ajaxComplete(function(){...})

詳細については、http: //api.jquery.com/jQuery.ajaxSetup/を参照してください。

于 2012-11-29T11:35:42.713 に答える