好的,我现在在PHP中使用类似这样的东西来重定向用户:
//This is a simplified version, but demonstrates it's use.
function redirect($location) {
header("Location: $location");
}
一个使用示例是,如果用户的会话已过期,或者如果用户尝试执行需要登录的操作,则会将用户重定向到登录页面,它会将用户发送到404页面。
所以在PHP中我只需要输入:
redirect("index.php/xyz");
我的问题是,我现在使用很多通过Ajax调用的PHP来处理表单和更新内容;当通过Ajax调用时,这种重定向方法不起作用。
我打算把这个函数改成使用Javascript而不是PHP。
所以我会使用类似这样的东西:
function redirect($location) {
echo '<script>';
echo 'window.location.replace("'.$location.'");';
echo '</script>';
}
据我所知,它既适用于正常的PHP使用,也适用于对PHP的Ajax调用。
这是不是很糟糕的做法?目前,仅将其用于Ajax调用会导致大量代码开销,因此将其用于所有内容是有意义的。
需要说明的是,我正在寻找一种既可以在普通PHP中工作,也可以在对PHP的Ajax调用中工作的解决方案,这样我就可以对这两种调用使用相同的代码-而不是必须分别执行这两种操作。例如,在提交表单action="dosomething.php"
时,根据情况,该文件可能只在数据库中添加一行或重定向到某个页面。但这可以使用Ajax或普通的HTML表单操作来调用。
发布于 2014-09-12 04:05:57
我会在Javascript上创建一个执行所有AJAX调用的通用ajax函数。然后,在全局函数中添加检查返回值是否为-1或其他值,并执行javascript重定向。
示例JS函数(假设您使用的是JQuery):
function ajaxCall(url, data, requestType, ...) {
$.ajax({
type: requestType,
url: url,
data: data,
dataType: 'json',
success: function(result) {
if (result.Status == 'Redirect') {
window.location = result.RedirectLink;
}
}
});
}
然后对所有ajax调用使用上面的js函数ajaxCall()
。
然后在你的PHP中,你会返回类似这样的东西:
echo json_encode(array('Status' => 'Redirect', 'RedirectLink' => '/'));
上面的方法更容易在以后发生变化时进行修改。
https://stackoverflow.com/questions/25795957
复制相似问题