【问题标题】:How to achieve a 302 redirect after AJAX post? Trying to implement prg-patternAJAX 发布后如何实现 302 重定向?尝试实现 prg 模式
【发布时间】:2017-03-15 15:30:41
【问题描述】:

出于 SEO 原因,我正在尝试实施“发布请求获取”模式,如下例所述: https://www.advertising.de/seo/wiki/prg-pattern.html

我的实现由一个伪链接元素组成,通过 CSS 像链接一样设置样式:

<span data-prg="redirect_url.html" class="btn redir-link" title="test">PRG Link test</span>

一个 jquery AJAX POST 调用

<script type="text/javascript">
    var request;
    $(function() {
        $('.redir-link[data-prg]').click(function (e) {
            var $self = $(this);
            request = $.ajax({
                url: "/prg.php",
                type: "post",
                data: {
                    url: $self.data("prg")
                }
            });
        });
    });
</script>

将创建重定向 URL 并应通过 GET 进行 302 重定向的 PHP 文件

header("Location:".$_POST['url'], true, 302);
exit;

apache 日志表明该实现有效:

“POST /prg.php HTTP/1.1”302 "GET /redirect_url.html HTTP/1.1" 200

但是浏览器内的页面并没有改变。我怀疑通过 ajax 调用的 php 文件会改变,但这不是我想要的。应该重定向原始页面。

我如何才能接受原始页面的 302 重定向?

【问题讨论】:

  • 原始页面不会被重定向,因为您不是在加载“页面”,而是通过 ajax 加载 data。根据定义,Ajax 不会影响整个页面。可能返回的数据是html,但不是浏览器load-302-redirect。 PRG 模式是“post-redirect-get”(不是问题中的-request-)。如果要更改整个页面,则需要在成功/完成中添加location.href=。处理此问题的一种方法是返回一个包含新 url 的响应对象。

标签: php jquery redirect seo


【解决方案1】:

您不能在 ajaxed 页面中重定向该页面对用户不可用,做一个简单的表单,将触发 post 请求到 prg 中的/prg.php 然后重定向回来

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多