Я понимаю, как получить страницу для перенаправления:

<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

Очевидно, я не хочу менять код на моем ПК после того, как он заработал, чтобы он работал в тестовой среде сотрудников, мы меняем его снова, когда он выйдет на бета-версию, или еще раз до того, как он перейдет в РЕЖИМ.

Перенаправление, подобное приведенному выше, будет использоваться после того, как кто-то отправит форму на нашем веб-сайте.

Как мне создать перенаправление, которое знает свое местоположение?

Моя текущая задача - выяснить, как это сделать в PHP, чтобы я мог написать тег до обслуживания страницы.

Но я также разрабатываю страницы в ASP.NET для других клиентов, поэтому я хотел бы увидеть способы сделать это, которые могут быть реализованы и в Windows.

2
jp2code 29 Авг 2014 в 00:56
2
$_SERVER['HTTP_HOST'] имеет текущее имя хоста. Вы также можете просто сделать обновление относительным: ...url=/".... / означает корень хоста.
 – 
Jonathan Kuhn
29 Авг 2014 в 01:00
Вопрос был неясен: Добавил то, что мне нужна 10-20 секундная задержка перед редиректом.
 – 
jp2code
29 Авг 2014 в 01:06
Поэтому эхо $_SERVER['HTTP_HOST'] в мета-обновлении вместо того, чтобы просто жестко кодировать хост. Или, как я уже сказал, просто сделайте url= /.
 – 
Jonathan Kuhn
29 Авг 2014 в 01:06

2 ответа

Лучший ответ

Измените тег перенаправления так, чтобы он указывал на URL-адрес /, который всегда будет корневым путем домена, в котором вы находитесь.

<meta http-equiv="refresh" content="10; url=/" />

4
Brett 29 Авг 2014 в 01:09
Если это работает, это именно то, что я ищу! Тот же самый код будет работать в PHP или ASP.
 – 
jp2code
29 Авг 2014 в 01:10

В 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

Здесь вы можете узнать больше о суперглобальном PHP СЕРВЕРЕ и перейти по этой ссылке в функцию PHP header ().

Использование ajax для отправки запросов на сервер

Если вы используете jQuery, вам, вероятно, следует подумать об этом решении: запросите файл PHP через ajax и обновите свою базу данных или некоторые вещи на стороне сервера. В случае успеха отобразить сообщение и через некоторое время выполнить перенаправление.

Примере:

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);

Надеюсь это поможет.

1
Bluedayz 29 Авг 2014 в 01:21
Мне нужна эта 10-20-секундная задержка, чтобы мои посетители увидели, что их данные были собраны. Ваша версия застегивает их прямо там. Позвольте мне добавить это к моему вопросу.
 – 
jp2code
29 Авг 2014 в 01:03
Вы можете сделать это с помощью javascript, добавил его в ответ.
 – 
Bluedayz
29 Авг 2014 в 01:06
@jp2code, Если мы говорим о перенаправлении после поста, который обновляет базу данных, вам нужно сделать это немедленно. Сохраните сообщение в сеансе или что-то в этом роде и отобразите его на следующей странице. Но если вы не перенаправите мгновенно, вы начнете получать двойные отправки.
 – 
developerwjk
29 Авг 2014 в 01:07
Или вы публикуете его через ajax, а затем, если он был успешным, показываете сообщение и перенаправляете через некоторое время.
 – 
Bluedayz
29 Авг 2014 в 01:07