Строка не скрывается сразу, в чем ошибка?

Выводится таблица вида
1520404891 one Удалить
1520404891 two Удалить

При нажатии на "Удалить" - происходит вызов js скрипта. Скрипт вызывает php скрипт и возвращает его результат.

php скрипт делает следующее
Смотрит, что ему передал js скрипт. А это будет one или two, в зависимости от нажатой ссылки.
Добавляет в куку это значение.
Вызывает функцию show_it

Функция show_it содержит массив. В массиве значения one и two.
Функция читает строку из куки .
Перебирает весь массив
Если строка или её часть из куки совпала со значением массива - не выводит его. Иначе выводит.

Пример работы
Клик по первой ссылке "1520404891 one Удалить" с id=one.
Вызов php скрипта - пишет в куку one.
Вызов функции - чтение куки, перебор массива. Элемент one равен one - не выводим.
Элемент two не равен one - выводим.
Возврат ответа в js в html.

В чем проблема - удаление происходит после второго клика. Или обновления страницы.
Что я проверял - после клика кука пишется. После клика всегда приходят новые данные (1520404891 это unix timestamp)

Строка не скрывается (удаляется) сразу, а только после обновления/ещё одного клика - в чем ошибка?

Весь код - 100 строк с комментариями одним архивом
https://cloud.mail.ru/public/4Tq4/F5trNATzN

Код
Главный файл - test.php
<?php
//Функции
include_once (__DIR__.'/functions.php');
?>

<html>
<head>
<title></title>
<meta http-equiv=Content-Type content="text/html;charset=UTF-8">
<script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>
<body>


<script>
$(document).ready(function() { 
$('#source_table').on('click', '.delete_link', function(){
$.ajax({
url: 'actions.php?set_my_cookie&id='+this.id,
success: function(data){$('#source_area').html(data);}
});
return false;
});
});
</script>

<div id="source_area">
<?php show_it(); ?>
</div>

</body>
</html>


Файл действий - то что вызывает js
actions.php
//Функции
include_once (__DIR__.'/functions.php');

//Принимаемые данные
$id=$_GET['id'];

//Вызоф функции
if (isset($_GET['set_my_cookie']))
{
echo set_my_cookie($id);
}


Функции
functions.php
//Ставим куку
function set_my_cookie($id)
{
$cookie_string=''; //Пустая строка, по умолчанию
$cookie_time=31536000; // Время кук - год

//Смотрим - есть ли у пользователя кука
if (isset($_COOKIE['cookie_string'])) 
{
//Если есть - получаем её значение
$cookie_string=$_COOKIE['cookie_string'];
}
//Удаляем куку в любом случае т.к. она будет перезаписана
setcookie('cookie_string', '', 0, "/");

//Добавляем скрываемое значение в строку
$cookie_string=$cookie_string.$id;
//Ставим куку со списком всех скрываемых значений
setcookie('cookie_string', $cookie_string, time()+$cookie_time,"/");

//Куки поставлены - вызываем показ значений (таблицы)
show_it();
}



//Показ таблицы со значениями
function show_it()
{
$my_array=array('one','two'); //Массив со значениями
$cookie_string=$_COOKIE['cookie_string']; //Строка из куки

echo'<table border="1" id="source_table">';
foreach ($my_array as $array_value)
{
//Если в строке из куки нет значения из массива - покажем её
if (strripos($cookie_string, $array_value)===false) echo'<tr><td>'.time().' '.$array_value.'</td><td><a href="" class="delete_link" id="'.$array_value.'">Удалить</a></td></tr>';
}
echo'</table>';
}
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
logpol32
@logpol32 Автор вопроса
Решил задачу вот таким способом.

Главный файл - test.php
...
<?php show_it($_COOKIE['cookie_string']); ?>


Файл функций
//Ставим куку
function set_my_cookie($id)
{
......................
//Куки поставлены - вызываем показ значений (таблицы)
show_it($cookie_string); //Передадим строку кук в функцию
}

//Показ таблицы со значениями
function show_it($cookie_string)
{
//Строка уже в функции - читать из массива кук не надо - всё уже есть
..................
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы