标签:blog http java 使用 os io 数据 for
当客户端与服务端的会话超时,发出一个Ajax数据请求,遇到403状态码怎么办?
在Shell终端里,超级管理员会话超时时,会自动显示密码输入确认。对页面来说,是要捕获每个状态码为403的失败请求,待登陆成功后一个个replay,还是在登陆成功后直接刷新页面?
jQuery发展到今天,应该会提供处理这种业务的功能。果然找到madpilot rants一篇文章,这些问题都迎刃而解。
具体过程是:
当请求遇到403错误后,会被放入403队列,并弹出登陆框,当登陆成功后,会自动重发队列中未成功的请求。
不过这个方案目前有一定缺陷:它不支持使用Promise风格添加success回调,success回调得写在options里面,也就是说:
//支持
jQuery.ajax("/foo.json",{
success: function(data){
//TODO
}
});
//而不支持
jQuery.ajax("/foo.json").done(function(data){
//TODO
});require(["jquery"],function($){
//Thanks @madpilot rants
//See http://myles.eftos.id.au/blog/2011/11/30/how-to-re-play-an-ajax-request-in-jquery-after-an-authentication-error/#.U-iHifmSx8E
var isDialogShown=false;
var ajaxQueue=[];
jQuery.ajaxSetup({
statusCode:{
//未登录或登陆后session失效时,服务端会返回状态码403
403:function(){
ajaxQueue.push(this);
if(isDialogShown){return;}
isDialogShown=true;
require(["infrastructure/user/LoginDialog"],function(LoginDialog){
var dialog=new LoginDialog("loginDialog",{
onfullfilled:function (){
isDialogShown=false;
ajaxQueue.forEach(function(context){
$.ajax(context);
});
ajaxQueue.length=0;
},
onrejected:function(){
}
});
dialog.placeAt(document.body,"beforeEnd")
dialog.open();
});
}
}
});
});
使用jQuery Ajax过滤实现REST不间断会话,布布扣,bubuko.com
标签:blog http java 使用 os io 数据 for
原文地址:http://blog.csdn.net/flashdelover/article/details/38588765