Recargar una página con un tag <a>

Tengo la siguiente duda:

Digamos que tengo una página en php en esta dirección localhost/mipagina.php y otra que está en localhost/mipagina2.php y necesito poner un tag <a href=""> que me recargue la misma página poniendo una variable en la url.

Sin embargo ese tag <a> está en una "plantilla" de header que es la misma para todas las páginas.

Es decir que si pongo <a href="localhost/mipagina2.php"> y estoy en la página 2 me la recarga pero si estoy en mipagina1.php no la recarga, si no que me lleva a la 2 y yo quiero que simplemente me recargue la misma pero con una variable en la url.

Edito para explicar mejor lo que quiero hacer, es algo como esto aunque evidentemente esto está mal pero soy muy novato en tema de jquery y esas cosas...

<a href="#" onclick="myFunction()">Añadir parametro par=2 en la url</p>

<script>
function myFunction() {
    document.getElementById("demo").innerHTML = "<?php $_GET['par'] = '2';?>";
}
</script>
4
задан 19.10.2016, 10:19
6 ответов

По крайней мере в Chrome, location у него есть свойство search что позволяет делать точно то, в чем ты нуждаешься:

<a href="#" onclick="location.search='?foo=bar'">Reload</a>

Таким образом ты перезагружаешь страницу добавляя переменную foo со стоимостью bar в унифицированный указатель ресурса. Я не знаю, если оно функционирует в других браузерах.

Здесь полный пример для браузеров, которые не выносят свойство search и для случаев, где уже существовали предварительные параметры:

<html>
   <head>
      <meta charset="utf-8">
      <script>
         function refresh() {
            var url = location.href.replace(/#$/, '');
            if (/\?/.test(url)) {
               var partes = url.split('?');
               var params = partes[1].split('&');
               var paramsfinal = [];
               for (var i in params) {
                  if (!params[i].startsWith('foo=')) {
                     paramsfinal.push(params[i]);
                  }
               }
               paramsfinal.push('foo=bar');
               location.href = partes[0] +'?' +paramsfinal.join('&'); 
            } else {
               location.href = url +'?foo=bar';
            }
         }
      </script>
   </head>
   <body>
      <p>foo es <?php echo isset($_GET['foo']) ? $_GET['foo'] : '(vacío)'; ?></p>
      <a href="#" onclick="refresh()">Recargar</a>
   </body>
</html>
3
ответ дан 24.11.2019, 13:03
  • 1
    Оно не функционирует с другими браузерами? –  Pavlo B. 19.10.2016, 11:12
  • 2
    он поддерживает другие параметры? –  Pavlo B. 19.10.2016, 11:26
  • 3
    Я не знаю, если оно функционирует с другими браузерами. Того, чтобы не быть экспертом и # 237; быть должным и # 237; схвати писать какой-то funci и # 243; n, что взял href и это изменил в t и # 250; необходимость. Не поддерживает другие пара и # 225; метры, замени целую цепь. –  Juan Manuel 19.10.2016, 19:13
  • 4
    Modifiqu и # 233; ответ для того, чтобы он служил в этих случаях. –  Juan Manuel 19.10.2016, 19:37
  • 5
    Я это скопировал, такой который и не я unciona, он не перезагружает ее p и # 225; gina, просто в и # 241; ade подушечка " # " в url и он делает совсем не м и # 225; в. –  Pavlo B. 20.10.2016, 10:29

Смоги использовать относительный, такой url, который я схватил:

 <a href=".">Recargar</a>

И ты не нуждаешься ни в каком типе логики на сервере, чтобы это производить. Тем не менее, чтобы это делать посредством PHP, ты мог бы использовать следующий код:

 $pagina_actual = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

У этого однако есть недостаток, которого клиент может изменять стоимость обоих переменных как заблагорассудится, вызывая оказанные не ожидаемые.

Существует возможность это делать посредством javascript:

 <a href="javascript:window.location.href=window.location.href">Recargar</a>

Преимущество вышеупомянутой состоит в том, что в случае, если унифицированный указатель ресурса будет содержать параметры, он поддерживает их.

Чтобы производить ее с PHP, поддерживая параметры посланными из-за get, ты мог бы делать нечто похожее:

 <?php
 // Construir la base de nuestra url
 $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]?" . http_build_query($_GET);

 // Comprobar si el parámetro par viene en la url
 if (!isset($_GET['par']) || trim($_GET['par']) == '') {
     $url .= '&par=2';
 }
 ?>
 <a href="<?=$url?>">Recargar</a>

Этот код одинокий в эффекты образца, так как он может быть высоко оптимизированным в условиях результата и безопасности, но так ты сделаешь себе ясную идею, из как делания этого.

8
ответ дан 24.11.2019, 13:03
  • 1
    Мне нужно, чтобы он поддержал параметры, но tambi и # 233; n я нуждаюсь в том, что в и # 241; ada один м и # 225; s, перезагрузив, но если в и # 241; ade один м и # 225; s например par=2 тогда, когда он вновь даст bot и # 243; n и параметр пара уже est и # 225; так как не это в и # 241; ada снова, просто смените Вашу стоимость на другой... –  Pavlo B. 19.10.2016, 10:10
  • 2
    @PavloB. Я обновил ответ, надеюсь, что он подает тебя. –  Muriano 19.10.2016, 13:22

PodrГ-схвати использовать ее funciГіn basename () из PHP, чтобы получать имя файла и указывать на твою ссылку в этот файл согласно, где ты был в этом моменте, чем-то asГ-:

<?php
  echo '<a href="'.basename(__FILE__).'">Recargar</a>'; 
?>

Или также ты мог бы использовать javascript, чтобы реализовывать он перезагружает ее.

1
ответ дан 24.11.2019, 13:03
  • 1
    Это подает меня до определенной степени, но я нуждаюсь в том, что adem и # 225; s перезагружения, как он делает этот funci и # 243; n я сохранился параметры, которые уже у меня есть в url... –  Pavlo B. 19.10.2016, 11:06

Я думаю, что лучший выбор - с:

window.location.reload(true)

используя это, таким образом:

<a href="#" onclick="window.location.reload(true)">

Пример

document.getElementById("time").innerHTML = Date();
<html>
<body bgcolor="aqua">

<a title="Reload!" href="#" onclick="window.location.reload(true)">Reload !</a>
	
<p id="time"></p>

</body>
</html>
1
ответ дан 24.11.2019, 13:03

Другой выбор, о котором не упомянули, просто с $ _SERVER ['PHP_SELF']:

<a href="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">Recargar</a>

Info безопасности:

Введя любую переменную в HTML (как в этом случае унифицированного указателя ресурса), и что смог быть измененным пользователя, высоко рекомендуется, чтобы ты использовал функцию htmlspecialchars (), предотвращается например атака Cross-Site-Scripting (XSS).

0
ответ дан 24.11.2019, 13:03

Другого сходного выбора

location.reload();

Также он может быть:

location.reload(true);

Различие состоит, в том, что поместив ему true загружает тебе страницу снова с сервера, это главным образом полезное в IE, так как в каких-то версиях, заняв это, он не освежал страницу.

0
ответ дан 24.11.2019, 13:03

Теги

Похожие вопросы