我的应用程序大量使用$.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源代码。它很漂亮。
看看这个: http://api.jquery.com/ajaxComplete/
您可以使用$.ajaxComplete(function(){...})
设置全局 ajax 完成处理程序(在每个 ajax 调用完成后调用)
更多信息: http://api.jquery.com/jQuery.ajaxSetup/
的想法(http://stackoverflow.com/questions/9815058/extending-jquery-ajax-success-global):
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 函数中