I have a jQuery AJAX function where I check for new messages, and if there are any, I show the user that they have a new message. My getNewMessage(); function getNewMessage(); , which now works great on page refresh, because everything happens once. However, when I put it in setInterval("getNewMessage()", 20000) , I get an infinite loop of notifications. This is understandable, but how can I stop him from notifying the user every time, but at the same time keep checking for new messages?
This is my getMessage function, sorry for the big function:
function getNewMessage() { $.post('', { newMessage : true}, function(data) { data = $.parseJSON(data); if(data) { var newMessageDialog = $('#newMessageDialog'); newMessageDialog.dialog( { autoOpen: false, modal: true, minWidth: '100', width: '800', hide: 'fold', show: 'drop', title: "New Messages", close: function() { hideAllNotifications(); } }); var html = ''; var length = 0; var total = 0; $.each(data, function(name, messages) { length = messages.length; total += length; grammar = (length > 1) ? "messages" : "message"; 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>'; }); $('.flexi_box h3', newMessageDialog).after(html); popUpDialogs(); $('a.popUpLink', newMessageDialog).on('click', function() { 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>'); $('.info').on('click', function() { $('#newMessageDialog').dialog('open').css('maxHeight', $(window).height()-90); }); return true; } });
source share