如果阵列发生变化,如何发送警报?

时间:2013-08-12 20:13:51

标签: php javascript jquery json

如果NewMessage发生变化,我需要提醒。我尝试了livechange on以及bind change,但没有任何效果。

相关PHP:

$message=6;
    $myReturnData["Message"] = $message; 

  //JSON-encode and return
  print json_encode($myReturnData);

相关的jQuery:

setInterval(function(){
     $.getJSON("foo.php", function(data){
         var NewMessage=(data.Message); 
         if(NewMessage>0){
             document.title= NewMessage + ' pm';}
             $(NewMessage).live("change", function() {
                alert(NewMessage);
                });
      });
   }, 3000);

2 个答案:

答案 0 :(得分:1)

'改变'没有做你认为应该做的事情。您应该将原始邮件存储在变量中,然后将其与您收到的新邮件进行比较。像这样:

var currentMessage = '';
setInterval(function(){
     $.getJSON("foo.php", function(data){
         var NewMessage=(data.Message); 
         if(NewMessage>0){
             document.title= NewMessage + ' pm';
             if (currentMessage !== NewMessage) {
                 alert(NewMessage);
                 currentMessage = NewMessage;
             }
         }
    });
}, 3000);

答案 1 :(得分:1)

假设您希望在服务器控制的变量发生变化时运行函数X.这意味着您正在使用轮询机制。

因此,如果您希望代码知道何时收到其他消息,则必须将上一条消息存储在回调函数范围之外的某处。

最简单的方法:

var lastMessage = 'the server will never ever forever ever return this message';

setInterval(function(){
    $.getJSON("foo.php", function(data){
        // .. arbitrary code
        if (lastMessage != data.Message)
        {
             alert('it changed');
             lastMessage = data.Message;
        }
        // .. more arbitrary code
    });
}, 3000);

我不认为以下代码有任何意义,甚至远程工作,因为 NewMessage 不是DOM元素,是吗?

$(NewMessage).live("change", function() {
            alert(NewMessage);
            });