我的应用程序会在没有会话时将用户重定向到登录页面。但是对于Ajax请求,这种重定向不会发生。
我需要为应用程序中的所有ajax调用处理此重定向问题。
答案 0 :(得分:1)
我在Zend / PHP项目上做了类似的事情。不幸的是,我不熟悉Java,在那里我只能建议基本方向。
默认情况下,XMLHttpRequest执行重定向。因此,如果您在ajax请求期间执行重定向,XMLHttpRequest将执行它,而不会让您知道重定向发生了。至少我发现无法捕捉到这种情况并以某种方式处理它。因此,在服务器端,我覆盖了重定向方法。假设您也可以在Java中执行类似的操作。一旦请求来自ajax(您可以在ajax请求中添加一些特定的标头并在服务器上检查它),您就可以返回与Location
标头不同的标头。例如,New-Location
,并且不进行实际重定向。只需停止执行请求。
在客户端,您可以使用jQuery.ajaxSetup一次为所有ajax请求配置全局处理程序。
以下是使用.ajaxSetup
:
$.ajaxSetup({
headers: {
XHTTPRequest: 'true'
}
});
此外,您还可以设置全局ajaxSuccess和ajaxError处理程序。它们将在单独的ajax请求的任何成功/错误处理程序之前执行。在全局ajax成功中,您可以将xhr
对象的头作为第三个参数传递给回调函数并执行重定向:
var newLocation = xhr.getResponseHeader("New-Location");
if(newLocation)
document.location = newLocation;
基本上,您可以返回特殊对象而不是标头,或者找到其他方式将新位置传递给ajaxSuccess
回调。
答案 1 :(得分:0)
您可以在AJAX成功模块中使用 window.location 将用户重定向到目标网页。
答案 2 :(得分:0)
我这样做的方式:
在服务器端:
define('BASE_URL','http://www.yourdomain.com');
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){
// if it's an ajax request
$json['success'] = 1;
$json['redirect'] = BASE_URL.'/logout';
echo json_encode($json);
}else{
// if it's an non ajax request
}
使用jquery在客户端端:
$.ajax({
type: "POST",
url: 'www.yourdomain.com',
data: {test: 1},
complete: function(e, xhr, settings){
switch(e.status){
case 500:
alert('500 internal server error!');
break;
case 404:
alert('404 Page not found!');
break;
case 401:
alert('401 unauthorized access');
break;
}
}
}).done(function( data ) {
var obj = jQuery.parseJSON(data)
if (obj.success == 1){
var url = obj.redirect;
location.href = url;
}
});