Отображать уведомление только один раз - PHP - Codeigniter - JS - PullRequest
0 голосов
/ 29 октября 2018

Существует функция ajax, которая отображает уведомление на странице home, однако каждый раз, когда я захожу на страницу home или обновляю страницу F5, уведомление отображается снова.

Как это исправить?

Есть ли способ сделать это, используя js jquery или PHP?

Ниже кода у меня есть:

Контроллер

public function get_message()
{
    $notification= array();
    $notification['message'] = 'message test';
    $notification['type'] = 1;
    echo json_encode($notification);
}

1020 * Javascript *

/*** variable ***/
var enum_toastr_type = {
    success: 1,
    info: 2,
    warning: 3,
    error: 4
}
/*** PageLoad start ***/
$(document).ready(function() {
toastr.options = {
    closeButton: true,
    positionClass: 'toast-bottom-right',
    timeOut: '20000'
}
   get_message_ajax();
});
/*** PageLoad end ***/
function show_message_toastr(mensagens) {
$(mensagens).each(function() {
    switch (this.tipo) {
        case enum_toastr_type.info:
            toastr.info(this.message);
            break;
        case enum_toastr_type.success:
            toastr.success(this.message);
            break;
        case enum_toastr_type.warning:
            toastr.warning(this.message);
            break;
        case enum_toastr_type.error:
            toastr.error(this.message);
            break;
    }
});
}
/*** Ajax start ***/
function get_message_ajax() {
    $.ajax({
        type: 'GET',
        async: false,
        contentType: 'application/json; charset=utf-8',
        url: "helper/get_message",
        success: (function(data) {
             //console.log(data);
             _obj = JSON.parse(data);
            show_message_toastr(_obj);
         }),
        error: (function(erro) {
             handle_ajax_error(erro);
        })
    });
}
/*** Ajax end ***/

1 Ответ

0 голосов
/ 29 октября 2018

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

// on page load check if user has not already visited this page
var visited = localStorage.getItem('visited');
if(!visited) {
  // call your ajax function which displays message
  get_message_ajax();
  // lets set visited to true so when user loads page next time then get_message_ajax() does not gets called
  localStorage.setItem('visited', true);
}

Если вам нужно что-то вроде; Что делать, если пользователь выходит из системы, тогда вы можете очистить локальное хранилище при выходе из системы. Может быть, вы можете добавить список щелчков на кнопку выхода из системы и очистить локальное хранилище.

localStorage.clear(); // this will clear all website data in localStorage

// or you can update visited key;
localStorage.setItem('visited', false);

Или, если вы хотите что-то более продвинутое, например, даже если пользователь не выходит из системы, и все же вы хотите показать сообщение, скажем, если пользователь заходит через 1 день. Затем вы можете сохранить метку времени с ключом и проанализировать ее при проверке посещений пользователя.

var object = {value: "value", timestamp: new Date().getTime()}
localStorage.setItem("key", JSON.stringify(object));

При доступе к ключу вы можете сделать что-то вроде этого;

var object = JSON.parse(localStorage.getItem("key")),
dateString = object.timestamp,
now = new Date().getTime().toString();
// here you can compare two time strings and decide to show message.

Для различной реализации и идей о том, как манипулировать временем, здесь есть некоторая помощь;

https://developer.mozilla.org/en-US/docs/Web/API/Storage

Когда истекает срок действия элементов в локальном хранилище HTML5?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...