有一个ajax功能,它在home
页面上显示通知,但是,每次我进入home
页面或刷新F5
页面时,都会显示通知再次。
该如何解决?
使用js jquery
或PHP
有什么方法吗?
在我的代码下面:
控制器
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 ***/
答案 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.
对于不同的实现方式以及关于如何操纵时间的想法,这会有所帮助;