【问题标题】:HTML Redirect To RootHTML 重定向到根目录
【发布时间】:2014-10-22 20:25:55
【问题描述】:

我了解如何让页面重定向:

<meta http-equiv="refresh" content="10; url=http://example.com/" />

我需要 10-20 秒的延迟(如上所示)让我的访问者看到他们的数据已成功收集。

我们有以下网站:

  • 本地电脑:http://localhost
  • 员工测试:http://dev.example.com
  • 客户测试版:http://beta.example.com
  • 直播:http://www.example.com

显然,我不想在我的 PC 上运行后更改代码,以便它在员工测试环境中运行,我们会在它进入 beta 版时再次更改它,或者在它上线之前再次更改它。

重定向,如上面的重定向,将在有人在我们的网站上提交表单后使用。

如何创建一个知道其位置的重定向?

我目前的任务是找出如何在 PHP 中执行此操作,因此我可能能够在提供页面之前编写标签。

但是,我也为其他客户在 ASP.NET 中开发页面,所以我想看看在 Windows 中也可以处理的方法。

【问题讨论】:

  • $_SERVER['HTTP_HOST'] 具有当前主机名。您也可以将刷新设为相对:...url=/".../ 表示主机的根目录。
  • 问题不清楚:添加了重定向前需要 10-20 秒延迟的事实。
  • 所以在元刷新中回显$_SERVER['HTTP_HOST'],而不仅仅是对主机进行硬编码。或者就像我说的那样,只需使 url=/.

标签: php html asp.net redirect


【解决方案1】:

在 PHP 中:

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    header('location: /'); //or header('location: '.$_SERVER['HTTP_HOST']);
}

使用 jQuery setTimeout 函数:

setTimeout(function(){ window.location = '/'; }, 10000);  //10.000 milliseconds delay

Here您可以了解更多关于 PHP SERVER 超级全局的信息并点击这个链接到 PHP header() 函数。

使用ajax向服务器发送请求

如果您使用 jQuery,您可能应该考虑以下解决方案:通过 ajax 请求 PHP 文件并进行数据库更新或一些服务器端的事情。如果成功,显示一条消息并在一段时间后重定向。

例子:

jQuery:

$('#form').on('submit', function() {
    var inputs = $(this).serialize(); //safe the submitted data
    $.post('path_to_file.php', inputs, function(data) {  //returned a json array
        var data = $.parseJSON(data);  //decode the json data
        if('errors' in data) {  //were there any errors?
            $.each(data['errors'], function() {
                $('#error-box').append(this); //show the error message
            });
        } else {  //if no errors
            $('#succes-box').html('Update was successful.');
            setTimeout(function(){ window.location = '/'; }, 10000); //Redirect after 10s
        }
    });
});

path_to_file.php

<?php
//Do something with post data.....
$response = array();
if(!$query) {
    $response['errors'][] = 'There was an error querying the database.';  //error example
}
echo json_encode($response);

希望这会有所帮助。

【讨论】:

  • 我需要 10-20 秒的延迟,让我的访问者看到他们的数据已被收集。您的版本将它们直接压缩到那里。让我将其添加到我的问题中。
  • 您可以使用 javascript 做到这一点,并将其添加到答案中。
  • @jp2code,如果我们谈论在更新数据库的帖子后重定向,您需要立即进行。在会话中保存消息或其他内容并将其显示在下一页上,但如果您不立即重定向,您将开始收到双重提交。
  • 或者你通过 ajax 发布它,如果成功,显示一条消息并在一段时间后重定向
【解决方案2】:

更改您的重定向标记以指向 URL /,这将始终是您所在域的根路径。

&lt;meta http-equiv="refresh" content="10; url=/" /&gt;

【讨论】:

  • 如果可行,那正是我要找的!相同的代码可以在 PHP 或 ASP 中运行。
猜你喜欢
  • 2012-08-15
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 2013-04-10
  • 2015-05-12
相关资源
最近更新 更多