【问题标题】:jQuery Ajax request every 30 seconds每 30 秒 jQuery Ajax 请求
【发布时间】:2010-12-15 13:49:36
【问题描述】:

我有这段代码,但是当有人在我的网站上时,这些值可能会发生变化。我需要每 30 秒左右更新一次#finance div。这个可以吗?

$(function() {
    $.getJSON(
        "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22%5EFTSE%22)%0A%09%09&format=json&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=?",

        function(json){
          $('#finance').text(json.query.results.quote.Change);
            // Patching payload into page element ID = "dog"
        });
});

【问题讨论】:

  • 别忘了选择答案。请返回您提出的大约 50 个问题中的一些问题,并接受其中的一些答案。
  • 道歉。会做。我现在都接受了哈哈

标签: jquery ajax yql


【解决方案1】:

您可以将代码放在单独的函数中,如下所示:

function LoadFinance()
{
    $(function() {
        $.getJSON(
        "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22%5EFTSE%22)%0A%09%09&format=json&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=?",
        function(json){ $('#finance').text(json.query.results.quote.Change);
        // Patching payload into page element ID = "dog" 
        });
    });
}

然后设置一个定时器,每30秒调用一次函数:

setInterval( LoadFinance, 30000 );

【讨论】:

  • 不要将字符串传递给setInterval(),使用直接引用! setInterval(LoadFinance, 30000 );
  • ouch .. setInterval( LoadFinance, 30000 ); 避免需要评估的文本代码。
  • @Alex - 实际上,确实如此。如果可以避免,从不传递字符串。只要我想要你拥有它的方式,我就可以覆盖你的函数,任何全局定义的函数都可以工作。在它自己的范围内直接引用,它不能被覆盖。如果您出于安全原因使用字符串...您将其向后使用。
  • @Nick - 实际上,我通常在不需要参数时使用直接引用,为什么我在上面的建议中选择了一个字符串,这是“一时冲动”的事情.. ;) 但我明白了您对有关功能范围的安全性的看法。我会记住的。谢谢你的课!
  • 截至this question,应该知道在这种情况下使用setInterval是一个非常的坏主意。
【解决方案2】:

你可以设置一个间隔,像这样:

$(function() {
  function update() {
      $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22%5EFTSE%22)%0A%09%09&format=json&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=?", 
      function(json){
        $('#finance').text(json.query.results.quote.Change);  
    });
  }
  setInterval(update, 30000);
  update();
});

setInterval() 在间隔之后第一次触发(例如,它在此处加载 DOM 后第一次运行 30 秒)...所以对于初始加载,您仍然需要立即调用它以及通过update()

【讨论】:

    【解决方案3】:

    绝对:

    setInterval(      
      function() {
        $.getJSON(
          "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22%5EFTSE%22)%0A%09%09&format=json&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=?",
    
        function(json){ $('#finance').text(json.query.results.quote.Change);
        // Patching payload into page element ID = "dog" });
    
      },
      30000);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 2012-06-13
      • 1970-01-01
      • 2022-01-20
      • 2019-11-21
      • 2013-12-31
      相关资源
      最近更新 更多