我有一个 getJSON 函数,我当前调用一次,然后使用 setInterval() 函数来收听可能随时更改值的 thingspeak.com 频道提要。
我想在我的 jQuery 代码中触发一个事件,在 getJSON 函数之外,当返回的数据 field1 的值为“1”时。如果值为“0”,则应关闭事件。到目前为止,一切都很好。但是由于 getJSON 每隔几秒钟就在监听频道,它会一遍又一遍地触发事件(timer() 函数)。
如何让 getJSON 事件“在后台运行”并且仅在从频道提要返回的数据实际发生更改时触发?返回的数据还有一个字段,该字段具有数据条目的唯一 ID (entry_id),因此可以侦听此值的更改。
当前运行此代码:
$(document).ready(function() {
getUpdates();
setInterval('getUpdates()',400);
});
function getUpdates() {
$.getJSON('http://api.thingspeak.com/channels/xxx/feed/last.json?callback=?', {key: "xxx"}, function(data) {
if(data.field1 == '1') {
// trigger timer function on
} else if(data.field1 == '0') {
// trigger timer function off
}
});
function timer() {
// Starts a timer countdown in a div
}
这是代码的第二个版本,可能会提供更多信息:
$(document).ready(function() {
getUpdates();
setInterval('getUpdates()',400);
});
function getUpdates() {
var entries = new Array();
$.getJSON('http://api.thingspeak.com/channels/xxx/feed/last.json?callback=?', {key: "xxx"}, function(data) {
if ($.inArray(data.entry_id,entries) === -1) {
//New entry, add the ID to the entries array
entries.push(data.entry_id);
//Check if the div should be visible or not
if(data.field1 == '1') {
$(".desc").show();
} else if(data.field1 == '0') {
$(".desc").hide();
}
} else if ($.inArray(data.entry_id,entries) > -1) {
// Same entry as previous call, do nothing.
}
});
}
<div class="desc"></div>
这仍然不起作用,因为它似乎没有更新条目数组。