首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在PHP和Ajax中调用PHP进行重定向的正确方法?

在PHP和Ajax中调用PHP进行重定向的正确方法?
EN

Stack Overflow用户
提问于 2014-09-12 04:00:12
回答 1查看 962关注 0票数 3

好的,我现在在PHP中使用类似这样的东西来重定向用户:

代码语言:javascript
代码运行次数:0
运行
复制
//This is a simplified version, but demonstrates it's use.
function redirect($location) {
    header("Location: $location");
}

一个使用示例是,如果用户的会话已过期,或者如果用户尝试执行需要登录的操作,则会将用户重定向到登录页面,它会将用户发送到404页面。

所以在PHP中我只需要输入:

代码语言:javascript
代码运行次数:0
运行
复制
redirect("index.php/xyz");

我的问题是,我现在使用很多通过Ajax调用的PHP来处理表单和更新内容;当通过Ajax调用时,这种重定向方法不起作用。

我打算把这个函数改成使用Javascript而不是PHP。

所以我会使用类似这样的东西:

代码语言:javascript
代码运行次数:0
运行
复制
function redirect($location) {
    echo '<script>';
        echo 'window.location.replace("'.$location.'");';
    echo '</script>';
}

据我所知,它既适用于正常的PHP使用,也适用于对PHP的Ajax调用。

这是不是很糟糕的做法?目前,仅将其用于Ajax调用会导致大量代码开销,因此将其用于所有内容是有意义的。

需要说明的是,我正在寻找一种既可以在普通PHP中工作,也可以在对PHP的Ajax调用中工作的解决方案,这样我就可以对这两种调用使用相同的代码-而不是必须分别执行这两种操作。例如,在提交表单action="dosomething.php"时,根据情况,该文件可能只在数据库中添加一行或重定向到某个页面。但这可以使用Ajax或普通的HTML表单操作来调用。

EN

回答 1

Stack Overflow用户

发布于 2014-09-12 04:05:57

我会在Javascript上创建一个执行所有AJAX调用的通用ajax函数。然后,在全局函数中添加检查返回值是否为-1或其他值,并执行javascript重定向。

示例JS函数(假设您使用的是JQuery):

代码语言:javascript
代码运行次数:0
运行
复制
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中,你会返回类似这样的东西:

代码语言:javascript
代码运行次数:0
运行
复制
echo json_encode(array('Status' => 'Redirect', 'RedirectLink' => '/'));

上面的方法更容易在以后发生变化时进行修改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25795957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档