-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 ://api.jquery.com/ajaxComplete/

您可以设置全局 ajax 完成处理程序(在每个 ajax 调用完成后调用)$.ajaxComplete(function(){...})

更多信息:http ://api.jquery.com/jQuery.ajaxSetup/

于 2012-11-29T11:35:42.713 回答
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 回答