如果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 :(得分: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);
});