Тема: Проблема з переходом назад ( go back )

Я виводжу пости відповідно до настройок дати користувача.

Спочатку показую всі пости

<div id="my_area">
<?php
$obj = new showPosts();
$obj->writePost();
?>
</div>

showPosts - це клас який виводить пости і сортує податі.
На цьому етапі проблем немає. Я можу відкрити пост, а потім натиснути go back (в браузері).

Коли користувач вибирає конкретну дату відбувається AJAX запит, у відповідь приходять відсортовані пости по даті.

<button type="button" onclick="showPosts()">Change the date</button>

Запит відправляється у файл де є клас showPosts (тобто той самий що клас про який я писав вище)
admin-ajax.php - так потрібно для WP, він потім перенаправляє

function showPosts()
    {
        var xhttp = new XMLHttpRequest;
      
        var afterDate = document.getElementById('afterDate').value;
        var beforeDate = document.getElementById('beforeDate').value;
        
        afterDate = afterDate.replace(/\//g, '-');
        beforeDate = beforeDate.replace(/\//g, '-');
               
        xhttp.onreadystatechange = function()
        {
            if(this.readyState == 4 && this.status == 200)
            {
                document.getElementById('my_area').innerHTML = this.responseText;
            }
        };
        xhttp.open('POST', '<?=admin_url( 'admin-ajax.php' )?>', true);
        xhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        xhttp.send('action=showPosts&afterDate=' + afterDate + '&beforeDate=' + beforeDate);
    }

Тут відбувається така проблема, коли відкрити пост і натиснути go back збиваються всі настройки дати, замість відсортованих показуються всі пости, браузер переносить сторінку на початок.

Я думав тут використати сесії, але як зрозуміти користувач зайшов повторно на цю сторінку чи користувач натиснув go back ?

В $_SERVER['HTTP_REFERER'] є інформація з якої сторінки був здійснений перехід, але це буде складно.

Як не виконувати скрипт які виводять пости коли була натиснута кнопка go back ?

2

Re: Проблема з переходом назад ( go back )

навіщо вам сесії, якщо у вас є куки?

Подякували: ostap34PHP, Betterthanyou2

3

Re: Проблема з переходом назад ( go back )

Я вже зрозумів у чому проблема - якщо коротко "неуважність".
Я відправляв POST запити там де потрібно було GET,
тому я змінив тип запиту.

Тепер PHP виглядає так

    if(!isset($_GET['afterDate']))//перевіряється чи є дата
        $_GET['afterDate']=(date('Y') - 1).'-'.date('m').'-'.date('d');//встановити дату
    if(!isset($_GET['beforeDate']))//перевіряється чи є дата
        $_GET['beforeDate']=(date('Y') + 1).'-'.date('m').'-'.date('d');//встановити дату
    require_once(WD_CONCERTS_DIR . '/php/showPosts.php');//обробити запит

а коли я відправляю AJAX-ом GET запит в мене не з'являється в address bar цей запит (ну наприклад я змінив дату на beforeDate=2030-02-15, а в address bar нічого не змінилося), я думаю це за того що Wordpress вимагає відправляти всі запити в admin-ajax.php, тому я зробив ще такий скрипт

        var adminAjax_url = '<?=admin_url('admin-ajax.php')?>';/*шлях до файлу admin-ajax.php*/
        var query_action = '?action=showPosts';/*тип дії(хук)*/
        var query_date = 'afterDate=' + /*дати*/
        afterDate +
        '&beforeDate=' +
        beforeDate;
        var gqtwp = adminAjax_url + query_action + '&' + query_date;/*get_query_to_wp*/
        var gqtcp = window.location.href + '?' + query_date;/*get_query_to_current_page*/

gqtwp - це для Wordpress

xhttp.open('GET', gqtwp, true);

gqtcp - це для поточної сторінки

history.pushState("", "", gqtcp);

тепер все працює як я хочу.

Подякували: 221VOLT1