新しいメッセージをチェックするjQuery AJAX関数があり、ある場合は、新しいメッセージがあることをユーザーに通知します。私の機能はgetNewMessage();
、すべてが一度に発生するため、ページの更新時に完全に機能するものです。ただし、に入れると、setInterval("getNewMessage()", 20000)
通知の無限ループが発生します。これは理解できますが、毎回ユーザーに通知するのを止めて、同時に新しいメッセージをチェックし続けるにはどうすればよいですか?
これは私の getMessage 関数です。大きな関数で申し訳ありません:
function getNewMessage()
{
/** Retrieve new messages **/
$.post('', { newMessage : true}, function(data)
{
data = $.parseJSON(data);
/** If new messages exist then display notification and popup **/
if(data)
{
var newMessageDialog = $('#newMessageDialog');
/** Create popup dialog options **/
newMessageDialog.dialog(
{
autoOpen: false,
modal: true,
minWidth: '100',
width: '800',
hide: 'fold',
show: 'drop',
title: "New Messages",
close: function()
{
hideAllNotifications();
}
});
/** Initialise variables **/
var html = '';
var length = 0;
var total = 0;
/** For each message we create the html for the message and insert into dialog **/
$.each(data, function(name, messages)
{
length = messages.length;
total += length;
/** For grammatical reasons. If length > 1 then "message" is plural**/
grammar = (length > 1) ? "messages" : "message";
/** Reverse the messages so the latest message appears at top and earliest message at bottom **/
messages.reverse();
var msgs = '';
for(var i in messages)
{
msgs += '<p>' + messages[i]['date'] + ': ' + messages[i]['message'] + '</p>';
}
html += '<a href="uid[' + messages[i]['uid'] + ']" class="popUpLink">' + name + ': ' + length + ' new ' + grammar + '</a>';
html += '<div class="popUpDialog" id="viewNewMessageDialog" title="New messages from ' + name + '"><div class="flexi_box"><h3 class="hubHeader">' + name + '</h3>' + msgs + '</div></div>';
html += '</br>';
});
/** Insert Content **/
$('.flexi_box h3', newMessageDialog).after(html);
/** Bind dialog to popuplinks **/
popUpDialogs();
/** Bind click event
* If clicked then we assume message has been read so we delete from messages table **/
$('a.popUpLink', newMessageDialog).on('click', function()
{
/** Get userid from href **/
var uid = $(this).attr('href');
var start = uid.indexOf('[');
var end = uid.indexOf(']');
uid = uid.slice(start + 1, end);
removeReadMessages(uid);
});
var grammar2 = (total > 1) ? 'messages': 'message'
var notifier = showNotification('info', '<h3>You have ' + total + ' new ' + grammar2 + '. Click here to view new ' + grammar2 + '</h3>');
/** Open dialog on click **/
$('.info').on('click', function()
{
/** Trigger Dialog **/
$('#newMessageDialog').dialog('open').css('maxHeight', $(window).height()-90);
});
return true;
}
});//end post
}