仅显示一次通知-PHP-Codeigniter-JS

时间:2018-10-29 13:09:39

标签: php jquery codeigniter

有一个ajax功能,它在home页面上显示通知,但是,每次我进入home页面或刷新F5页面时,都会显示通知再次。

该如何解决?

使用js jqueryPHP有什么方法吗?

在我的代码下面:

控制器

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

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 :(得分:1)

为此,您将需要在浏览器中设置cookie以跟踪用户是否已经访问了此页面。这也可以防止此页面重新加载。您可以使用本地存储在浏览器中存储任何数据。

// 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

When do items in HTML5 local storage expire?