setInterval没有调用函数

时间:2013-08-12 17:45:14

标签: javascript function setinterval

get_alerts = function(alerts_url) {
    return $.getJSON(alerts_url, function(alerts) {
        return $("#alerts_box").html("" + alerts.length + " Alerts");
    });
};

window.setInterval(function() {
    return get_alerts($("#alerts_box").data("alerts-url"));
}, 1000);

如果我在setInterval区域放置一个断点,我会每秒收到通知,但getJSON调用永远不会被执行。查看我的服务器日志,永远不会向alerts_url发送请求。

更新 似乎是一个间歇性的Chrome问题。在Safari上解决它并按预期工作。立即清除Chrome,我会再试一次。

2 个答案:

答案 0 :(得分:0)

您的代码似乎没问题,但缺少的是alerts-url的初始化。您没有在代码示例中包含它,因此我创建了jsFiddle to test。以下代码对我有用:

$("#alerts_box").data("alerts-url","http://data.wien.gv.at/daten/wfs?service=WFS&request=GetFeature&version=1.1.0&typeName=ogdwien:BAUMOGD&srsName=EPSG:4326&outputFormat=json&maxfeatures=5")

get_alerts = function(alerts_url) {
  $.getJSON(alerts_url, function(alerts) {
    $("#alerts_box").html(new Date().getTime() + " " + alerts.features.length + " Alerts");
  });
};
window.setInterval(function() {
    get_alerts($("#alerts_box").data("alerts-url"));
  }
, 1000);

答案 1 :(得分:0)

看起来是某种缓存问题。我认为Chrome将所有AJAX请求视为不可缓存,但我猜不是。这是修复:

get_alerts = function(alerts_url) {
  var noCache;
  noCache = new Date().getTime();
  return $.getJSON(alerts_url, {
    "cache": noCache
  }, function(alerts) {
    return $("#alerts_box").html("" + alerts.length + " Alerts");
  });
};

发送cache选项以及请求似乎解决了这个问题。显然,你也可以发一个随机的,唯一的字符串(比如日期/时间)作为url中的一个参数,也可以修复它