Это одно из мест, с помощью которого привязка данных, используемая во многих новых фреймворках JavaScript, будет очень полезна для вас ...
Итак, если вы используете Angular, React или любые другие фреймворки, которые делают два способа связывания данных, эта проблема просто исправлена для вас, поэтому простым языком ваш результат undefined
на первом этапе, поэтому вы получили result = undefined
до получения данных, а затем, как только вы получите результат , он будет обновляться и присваиваться новому значению, которое отвечает на ваш вызов Ajax ...
Но как вы можете сделать это в чистом javascript или jQuery, например, как вы задали этот вопрос?
Вы можете использовать обратный вызов, обещание и недавно наблюдаемое, чтобы обрабатывать его для вас, например, в обещаниях мы имеем некоторые функции, такие как success () или then (), которые будут выполняться, когда ваши данные будут готовы для вас, с функцией обратного вызова или подписки на наблюдаемые.
Например, в вашем случае, в котором вы используете jQuery, вы можете сделать что-то вроде этого:
$(document).ready(function(){
function foo() {
$.ajax({url: "api/data", success: function(data){
fooDone(data); //after we have data, we pass it to fooDone
}});
};
function fooDone(data) {
console.log(data); //fooDone has the data and console.log it
};
foo(); //call happens here
});
Для получения дополнительной информации n изучение обещаний и наблюдаемых, которые являются новыми способами для создания асинхронных материалов.
Резюме существующих ответов плюс мои собственные два цента:
Вы можете использовать функцию header()
для отправки нового HTTP-заголовка, но это должно быть отправлено в браузер перед любым HTML или текстом (например, до объявления <!DOCTYPE ...>
, например).
header('Location: '.$newURL);
die () или exit ()
header("Location: http://example.com/myOtherPage.php");
die();
Почему вы должны использовать die()
или exit()
: The Daily WTF
Абсолютный или относительный URL
С июня 2014 года могут использоваться как абсолютные, так и относительные URL-адреса. См. RFC 7231 , который заменил старый RFC 2616 , где разрешены только абсолютные URL.
Коды статуса
PHP " Местоположение «-header по-прежнему использует HTTP 302 -предельный код, но это не тот, который вы должны использовать. Вы должны рассмотреть либо 301 (постоянная переадресация), либо 303 (другое).
Примечание: W3C упоминает , что 303 -header несовместим со многими пользовательскими агентами pre-HTTP / 1.1. В настоящее время используемыми браузерами являются все пользовательские агенты HTTP / 1.1. Это неверно для многих других пользовательских агентов, таких как пауки и роботы.
Заголовки HTTP и функция header()
в PHP
Вы можете использовать альтернативу метод http_redirect($url);
, для которого необходимо установить пакет PECL pecl .
Эта функция не включает код состояния 303 :
function Redirect($url, $permanent = false)
{
header('Location: ' . $url, true, $permanent ? 301 : 302);
exit();
}
Redirect('http://example.com/', false);
Это более гибко:
function redirect($url, $statusCode = 303)
{
header('Location: ' . $url, true, $statusCode);
die();
}
Как уже упоминалось, header()
перенаправляет работу только до того, как что-либо выписано. Они обычно терпят неудачу, если вызывается inmidst HTML . Затем вы может использовать метод обхода HTML-заголовка (не очень профессиональный!), например:
<meta http-equiv="refresh" content="0;url=finalpage.html">
Или перенаправление JavaScript даже.
window.location.replace("http://example.com/");
Я уже ответил на этот вопрос, но я сделаю это снова, так как между тем я узнал, что есть особые случаи, если вы работаете в CLI (перенаправления не могут произойти и, следовательно, не должны exit()
), или если ваш веб-сервер работает с PHP как (F) CGI (для правильной переадресации требуется предварительно установленный заголовок Status
).
function Redirect($url, $code = 302)
{
if (strncmp('cli', PHP_SAPI, 3) !== 0)
{
if (headers_sent() !== true)
{
if (strlen(session_id()) > 0) // if using sessions
{
session_regenerate_id(true); // avoids session fixation attacks
session_write_close(); // avoids having sessions lock other requests
}
if (strncmp('cgi', PHP_SAPI, 3) === 0)
{
header(sprintf('Status: %03u', $code), true, $code);
}
header('Location: ' . $url, true, (preg_match('~^30[1237]$~', $code) > 0) ? $code : 302);
}
exit();
}
}
Я также рассмотрел вопрос о поддержке различных Коды перенаправления HTTP (301
, 302
, 303
и 307
), как это было описано в комментариях к моему предыдущему ответу, вот описания:
Вы можете использовать переменные сеанса для управления доступом к страницам и авторизации действительных пользователей.
<?php
session_start();
if ( !isset( $_SESSION["valid_user"]) )
{
header("location:../");
die();
}
// Page goes here
?>
http://php.net/manual/en/reserved.variables.session .php .
Недавно я получил кибератаки и решил, что мне нужно знать пользователей, пытающихся войти в панель администратора или зарезервированную часть веб-приложения.
, поэтому я добавил IP-адрес доступа к журналу и пользовательские сессии в текстовом файле, потому что я не хочу беспокоить мою базу данных.
Да, можно использовать PHP, мы перенаправимся на другую страницу, попробуем это:
<?php
header("location:./");//redirect to index file
header("location:index.php");//redirect to index file
header("location:example.php");
?>
Возможно, слишком поздно ответить на этот вопрос. Тем не менее, вот мои мысли:
IMHO, лучший способ перенаправить входящий запрос - это использовать заголовки местоположений, которые идут
<?php
header("Location: /index.php");
?>
Как только этот оператор будет выполнен , а вывод отправлен, браузер начнет перенаправлять пользователя. Однако убедитесь, что перед отправкой заголовков не было никакого выхода (любого echo / var_dump), иначе это приведет к ошибкам.
Хотя это быстрый и грязный способ добиться того, что изначально было задано, но в конечном итоге это будет катастрофой для SEO, так как этот тип перенаправления всегда интерпретируется как перенаправление 301/302, поэтому поисковые системы всегда будут видеть вашу индексную страницу как перенаправленную страницу, а не что-то целевой страницы / главной страницы. Следовательно, это повлияет на настройки SEO на сайте.
Как и другие здесь, отправьте заголовок местоположения с помощью:
header( "Location: http://www.mywebsite.com/otherpage.php" );
, но вам нужно сделать это, прежде чем отправлять какой-либо другой вывод в браузер.
Также , если вы собираетесь использовать это, чтобы блокировать пользователей, не прошедших проверку подлинности, с определенных страниц, как вы упомянули, помните, что некоторые пользовательские агенты будут игнорировать этот и продолжать на текущей странице в любом случае, так что вы Мне нужно будет умереть () после его отправки.
Да, вы можете использовать функцию header () ,
header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */
exit();
. Также наилучшей практикой является вызов функции exit () сразу после header()
, чтобы избежать выполнения кода.
Согласно документации, необходимо вызывать header()
до отправки любого фактического выхода.
Вывод JavaScript из PHP с использованием echo, который выполнит задание.
echo '<script type="text/javascript">
window.location = "http://www.google.com/"
</script>';
Вы не можете сделать это на PHP, если не буферизовать вывод страницы, а затем проверить условие переадресации. Это может быть слишком много хлопот. Помните, что заголовки - это первое, что отправлено со страницы. Большая часть перенаправления обычно требуется позже на странице. Для этого вам нужно буферизировать весь вывод страницы и позже проверить состояние переадресации. В этот момент вы можете либо перенаправить заголовок пользователя страницы (), либо просто эхо-буферизованный вывод.
Подробнее о буферизации (преимущества)
header( 'Location: http://www.yoursite.com/new_page.html' );
Накануне семантической сети правильность - это то, что нужно учитывать. К сожалению, «Location» -header PHP по-прежнему использует HTTP 302 -редакторный код, который, строго говоря, не самый лучший для перенаправления. Тот, который он должен использовать, является 303 .
W3C достаточно любезен, чтобы упомянуть , что заголовок 303 несовместим со «множеством pre -HTTP / 1.1 пользовательских агентов ", который не будет использовать браузер в текущем использовании. Таким образом, 302 является реликтом, который не должен использоваться .
... или вы могли бы просто игнорировать его, как и все остальные ...
Если вы используете Apache, вы также можете использовать .htaccess для перенаправления.
Redirect 301 / http://new-site.com/
<?php header('Location: another-php-file.php'); exit(); ?>
, или если вы уже открыли теги php, используйте это:
header('Location: another-php-file.php'); exit();
Вы также можете перенаправить на внешние страницы, например:
header('Location: https://www.google.com'); exit();
Убедитесь, что вы включаете exit()
или include die()
<?php
$url = "targetpage"
Function redirect$url(){
If (headers_sent()) == false{
Echo '<script>window.location.href="' . $url . '";</script>';
}}
?>
1. Используя функцию заголовка с
blockquote>exit()
<?php header('Location: target-page.php'); exit(); ?>
, но если вы используете функцию заголовка, то несколько раз вы получите сообщение «предупреждение, подобное уже отправленному», чтобы решить, что не эхо или печать перед отправкой или вы можете просто использовать
die()
илиexit()
после функции заголовка.2. Без заголовка
blockquote><?php echo "<script>location.href='target-page.php';</script>"; ?>
здесь вы не столкнетесь с какой-либо проблемой
3. Использование функции заголовка с
blockquote>ob_start()
иob_end_flush()
<?php ob_start(); //this should be first line of your page header('Location: target-page.php'); ob_end_flush(); //this should be last line of your page ?>
Мы можем сделать двумя способами
ниже кода php
<?php header("Location: https://bskud.com/PINCODE/BIHAR.php"); exit; ?>
Сохранить выше кода в https://bskud.com/PINCODE/BIHAR/index.php
2.Когда любое условие true, то перенаправление на другую страницу
<?php $myVar = "bskud"; if ($myVar == "bskud") { ?> <script> window.location.href="https://bskud.com"; </script> <?php } else { echo "<b>Check Website Name Again</b>"; } ?>
`
Многие из этих ответов верны, но они предполагают, что у вас есть абсолютный URL-адрес, что может и не быть. Если вы хотите использовать относительный URL-адрес и сгенерировать остальные, вы можете сделать что-то вроде этого ...
$url = 'http://' . $_SERVER['HTTP_HOST']; // Get the server
$url .= rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); // Get the current directory
$url .= '/your-relative/path-goes/here/'; // <-- Your relative path
header('Location: ' . $url, true, 302); // Use either 301 or 302
Большинство этих ответов забывают о очень важном шаге!
header("Location: myOtherPage.php");
die();
Оставив эту жизненно важную вторую строку, вы увидите, что вы попали в The Daily WTF . Проблема в том, что браузеру нет , чтобы уважать заголовки, возвращаемые вашей страницей, поэтому при игнорировании заголовков остальная часть страницы будет выполнена без перенаправления.
<?php
header('Location: redirectpage.php');
header('Location: redirectpage.php');exit();
echo "<script>location.href='redirectpage.php';</script>";
?>
Это регулярное и нормальное перенаправление PHP, но вы можете перенаправить страницу с несколькими секундами ниже кода:
<?php
header('refresh:5;url=redirectpage.php '); //Note: here 5 means 5 seconds wait for redirect.
?>
Существует несколько способов сделать это, но если вы предпочитаете php
, я бы рекомендовал использовать функцию header()
.
В основном
$your_target_url = “www.example.com/index.php”;
header(“Location : $your_target_url”);
exit();
Если вы хотите отбросить его на носу, лучше использовать его в функциях, таким образом, вы сможете добавить в него аутентификации и другие проверочные элементы.
Давайте попробуем, проверив level.
Итак, предположим, что вы сохранили уровень полномочий пользователя в сеансе с именем u_auth
.
В function.php
<?php
function authRedirect($get_auth_level, $required_level, $if_fail_link = “www.example.com/index.php”){
if($get_auth_level != $required_level){
header(location : $if_fail_link);
return false;
exit();
}else{
return true;
}
}
. . .
вы Затем вызывается функция для каждой страницы, которую вы хотите аутентифицировать.
Как в page.php
или на любой другой странице.
<?php
// page.php
require “function.php”
authRedirect($_SESSION[‘u_auth’], 5); // redirects to www.example.com/index.php if the user isn’t auth level 5
authRedirect($_SESSION[‘u_auth’], 4); // redirects to www.example.com/index.php if the user isn’t auth level 4
authRedirect($_SESSION[‘u_auth’], 2, “www.someotherplace.com/somepage.php”); // redirects to www.someotherplace.com/somepage.php if the user isn’t auth level 2
. . .
Надеюсь, вы найдете некоторые из содержание полезно
Ссылки;
Лучший способ перенаправления с PHP - это следующий код ...
header("Location: /index.php");
Убедитесь, что код не будет работать после
header("Location: /index.php");
Все коды должны быть выполнены перед указанной строкой.
Предположим,
Случай 1:
echo "I am a web developer";
header("Location: /index.php");
Он будет правильно перенаправлен к местоположению (index.php).
Случай 2:
return $something;
header("Location: /index.php");
Вышеприведенный код не будет перенаправлен на местоположение (index.php).
Надеюсь, это ясно.
a) Простое перенаправление без параметров
<?php
header('Location: index.php');
?>
b) Перенаправление с параметрами GET
<?php
$id = 2;
header("Location: index.php?id=$id&msg=succesfully redirect");
?>
2. Перенаправление с помощью javascript в php
a) Простое перенаправление без параметров
<?php
echo "<script>location.href='index.php';</script>";
?>
b) Перенаправление с параметрами GET
<?php
$id = 2;
echo "<script>location.href='index.php?id=$id&msg=succesfully redirect';</script>";
?>
Вы можете попытаться использовать функцию заголовка php для перенаправления. Вы захотите установить выходной буфер, чтобы ваш браузер не выдавал предупреждение о переадресации на экран.
ob_start();
header("Location: ".$website);
ob_end_flush();
Чтобы перенаправить посетителя на другую страницу (особенно полезно в условном цикле), просто используйте следующий код:
<?php
header('Location: mypage.php');
?>
В этом случае mypage.php
является адресом страницы, на которую вы хотите перенаправить посетителей. Этот адрес может быть абсолютным и может также включать параметры в этом формате: mypage.php?param1=val1¶m2=val2)
Относительный / абсолютный путь
При работе с относительными или абсолютными путями, идеально выбрать абсолютный путь от корня сервера (DOCUMENT_ROOT). Используйте следующий формат:
<?php
header('Location: /directory/mypage.php');
?>
Если когда-либо целевая страница находится на другом сервере, вы включаете полный URL-адрес:
<?php
header('Location: http://www.ccm.net/forum/');
?>
Заголовки HTTP
Согласно протоколу HTTP, HTTP-заголовки должны быть отправлены before
любым типом контента. Это означает, что перед заголовком никогда не нужно отправлять символы, даже пустое пространство!
Временные / постоянные переадресации
По умолчанию тип перенаправления, представленный выше, является временным. Это означает, что поисковые системы, такие как Google, не будут учитывать перенаправление при индексировании.
Если вы хотите уведомить поисковые системы о том, что страница была постоянно перемещена в другое место, используйте следующий код:
<?
header('Status: 301 Moved Permanently', false, 301);
header('Location: new_address');
?>
Например, эта страница имеет следующий код :
<?
header('Status: 301 Moved Permanently', false, 301);
header('Location: /pc/imprimante.php3');
exit();
?>
Когда вы нажимаете на ссылку выше, вы автоматически перенаправляетесь на эту страницу. Кроме того, это постоянное перенаправление (статус: 301 перемещен навсегда). Итак, если вы введете первый URL-адрес в Google, вы автоматически перенаправляетесь на вторую, перенаправленную ссылку.
Интерпретация кода PHP
Код PHP, расположенный после заголовка (), будет интерпретироваться сервером, даже если посетитель переместится на адрес, указанный в перенаправлении. В большинстве случаев это означает, что вам нужен метод, чтобы следовать функции header()
функции exit()
, чтобы уменьшить нагрузку на сервер:
<?
header('Status: 301 Moved Permanently', false, 301);
header('Location: address');
exit();
?>
Используйте header()
функцию для отправки HTTP Location
header :
header('Location: '.$newURL);
Вопреки мнению некоторых, die()
ничего не имеет делать с перенаправлением. Используйте его только в том случае, если вы хотите перенаправить вместо обычного выполнения.
example.php:
<?php
header('Location: static.html');
$fh = fopen('/tmp/track.txt','a');
fwrite($fh, $_SERVER['REMOTE_ADDR'].' '.date('c')."\n");
fclose($fh);
?>
Результат или 3 исполнения:
bart@hal9k:~> cat /tmp/track.txt
127.0.0.1 2009-04-21T09:50:02+02:00
127.0.0.1 2009-04-21T09:50:05+02:00
127.0.0.1 2009-04-21T09:50:08+02:00
Возобновление & mdash; обязательным die()
/ exit()
является некоторая городская легенда, которая не имеет никакого отношения к фактическому PHP. Не имеет никакого отношения к клиенту, «уважающему» Location:
заголовок. Отправка заголовка не останавливает выполнение PHP, независимо от используемого клиента.
вы можете использовать некоторые java-скриптовые методы, например ниже
1)self.location="http://www.example.com/index.php";
2)window.location.href="http://www.example.com/index.php";
3)document.location.href = 'http://www.example.com/index.php';
4)window.location.replace("http://www.example.com/index.php");
function Redirect($url, $permanent = false)
{
if (headers_sent() === false)
{
header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
}
exit();
}
Redirect('http://www.google.com/', false);
Не забудьте умереть () / exit ()!