2013-08-12 2 views
0

Если NewMessage меняется, я хочу оповещение. Я пробовал live и change 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); 
+0

Просьба уточнить, о чем вы просите. Вопрос, который вы написали, непонятен. – JoshDM

+0

Я хочу, если NewMessage изменит оповещение – Veryjackson

+0

Я попытался интерпретировать ваш вопрос ** «Я хочу, чтобы изменение NewMessage получило предупреждение, я не знаю, как я могу сделать live change change change, но я не могу поблагодарить» * * на основе вашего комментария. – JoshDM

ответ

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); 
+0

Я бы заменил самые внутренние линии; назначение, затем предупреждение. – JoshDM

+0

Да, сработало спасибо – Veryjackson

+0

уверен, почему нет :-) – Ringo

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); 
      }); 
Смежные вопросы