刚开始用Jquery,不知道一般这种情况是怎么处理的。
我的程序结构大概是这样子的,server端有些php文件,这些php文件用来产生xml文件。基本上每个php文件中都包含了session.php。
session.php主要就是用来验证用户session是否过期,内如如下:
<?php
session_start();
setcookie(session_name(), session_id(), time() + 1*60, "/");
if(!(isset($_SESSION["username"]))||!(isset($_SESSION["password"])))
{
header("Refresh:0;url=./login.php");
exit(0);
}
?>
然后,比如一个用来产生x,y坐标的coor_generator.php,大致内容为:
<?php
require_once("session.php");
require_once("DB.php"); //DB class declartion
$status_code = 1;
header("Content-type: text/xml");
header("Cache-Control: no-cache");
echo "<?xml version=\"1.0\"?>\n";
echo "<response>\n";
echo "\t<status>$status_code</status>\n";
......
?>
这样子,我在前端,利用JQquery的.ajax想做一些处理,比如:
$.ajax(
{type:"GET",
url:"./include/coor_generator.php",
complete:function (xhr,statusText)
{
alert(xhr.status);
}
}
不过从server端返回的xhr.status始终是200,不管是返回的我想要的xml,还是用户session过期后,php产生的redirection。
假如coor_generator.php不存在,倒是可以看到$.ajax(error(xhr,statusText))中xhr.status是404。
这种需求应该很常见啊,不知道JQuery AJAX怎么处理这种redirection的?不知道是否把问题说清楚了。
--
FROM 208.181.115.*
我现在可以用这种方法解决这个问题,不知道是否是正确安全的做法。
在我的session.php里加上header("HTTP/1.0 301 Redirect to Login"),即:
session.php为:
<?php
session_start();
setcookie(session_name(), session_id(), time() + 1*60, "/");
if(!(isset($_SESSION["username"]))||!(isset($_SESSION["password"])))
{
header("HTTP/1.0 301 Redirect to Login");
header("Refresh:0;url=./login.php");
exit(0);
}
?>
JQuery前端处理为:
$.ajax(
{
type:"GET",
url:"./include/coor_generator.php",
data:{network_type:nw_type},
dataType:"xml",
error:function (xhr,statusText,error)
{
if (xhr.status == "301")
{
window.location="./login.php";
}
},
success: compute_coord
}
);
这样子php显式返回http头301,jquery的.ajax似乎就把这种response当作error处理,然后在js端redirect.
【 在 loy (好像一阵风) 的大作中提到: 】
: 刚开始用Jquery,不知道一般这种情况是怎么处理的。
: 我的程序结构大概是这样子的,server端有些php文件,这些php文件用来产生xml文件。基本上每个php文件中都包含了session.php。
: session.php主要就是用来验证用户session是否过期,内如如下:
: ...................
--
FROM 208.181.115.*