繁体   English   中英

javascript setInterval不在jQuery中重复

[英]javascript setInterval not repeating in jquery

function get_stock_data(symbol, index) {
    var url = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22"+ symbol +"%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=";
    $.getJSON(url, function(data) {
        var price = $(".stock-price");
        price[index].innerHTML = "";
        price[index].appendChild(document.createTextNode(data.query.results.quote.Change));
        console.log(data);
    }).success(function() {
        console.log("success");
    }).fail(function() {
        console.log("Failed");
    }); 
}


$("document").ready(function() {

    var symbol = $(".stock-symbol");

    for(var i = 0; i < symbol.length; i++) {
        setInterval(get_stock_data(symbol[i].firstChild.textContent, i) , 1000);
        console.log("hello");
    }
});

此脚本中的问题是get_stock_data函数仅执行一次...请帮助...我希望将数据更新为DOM。

这样的事情应该起作用。

function get_stock_data(symbol, index) {
    var url = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22" + symbol + "%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=";
    $.getJSON(url, function (data) {
        var price = $(".stock-price");
        price[index].innerHTML = "";
        price[index].appendChild(document.createTextNode(data.query.results.quote.Change));
        console.log(data);
    }).success(function () {
        console.log("success");
    }).fail(function () {
        console.log("Failed");
    });
}
function setUpInterval() {
    var symbol = $(".stock-symbol");
    for (var i = 0; i < symbol.length; i++) {
        setInterval("get_stock_data(" + symbol[i] + "," + i + ")", 1000);
    }
}
setUpInterval();    

您正在setInterval调用中调用get_stock_data 因此它只被调用一次。 实际上,您正在将undefined传递给setInterval ,因为get_stock_data不返回任何内容。

setInterval的第一个参数应该是您要调用的函数。 在这种情况下,您似乎想使用一些传入的参数来调用get_stock_data。 为了使它与setInterval ,您需要传递一个匿名函数,如下所示:

for (var i = 0; i < symbol.length; i++) {
  setInterval(function() { get_stock_data(symbol[i].firstChild.textContent, i); }, 1000);
}

这样,您将函数传递给setIntervalsetInterval将每隔1000(约)毫秒调用一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM