Как предотвратить повторение себя в window.onload

Я пытаюсь выполнить действие js, которое автоматически отправляет информацию на URL для будущего использования с php. Для этого я добавил событие "onload" в объект окна и изменил URL в слушателе. Вот как это выглядит до сих пор:

window.addEventListener("load", function() {
    window.location = "?test=test";
}, false);

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

6 ответов

Решение

Если вы не хотите использовать AJAX и не хотите писать функции JS для разбора строк запроса, почему бы не просто:

<?php if(!isset($_GET['test'])): ?>
<script>
   window.addEventListener("load", function() {
       window.location = "?test=test";
   }, false);
</script>
<?php else: ?>

 <!--No JS written on the page, so no redirect -->

<?php endif;?>

Но вы действительно должны изучить AJAX, попробуйте использовать некоторые JS-фреймворки, такие как jQuery, чтобы помочь вам в этом процессе: http://api.jquery.com/jquery.ajax/

Вы можете просто стереть onLoad метод после запуска, вот так:

<script>
function doLoadStuff()
{
    doSomeStuff();

    //Clear onLoad contents
    body.onLoad = function() {};
}
</script>
<body onLoad="doLoadStuff();">MyContent</body>

Добавьте простой флаг в URL, например, так: window.location = "?test=test&second=true";

Если вы хотите передать переменные, сделайте это:

<?php
    if(!isset($_GET['page'])){ //this line check if the variable field is available 
    $a = "Blank";
    }else{
    $a = $_GET['page'];
    }
?>

это оно.

Убедитесь, что вы уже на этой странице, прежде чем перенаправлять.

Как предложено в разделе Как получить значения строки запроса в JavaScript?

Напишите функцию для проверки получения параметров URL в JS GetQueryStringParams()

Затем, как предлагают другие, передайте параметр send во время перезагрузки.

window.location = "?test=test&second=true";

Используйте функцию в JS, чтобы проверить, есть ли у вас вторая строка запроса URL, а если ее нет, перезагрузите страницу.

Другие вопросы по тегам