javascript setInterval不在jquery中重复

时间:2016-04-14 16:42:27

标签: javascript jquery ajax

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函数只执行一次... plz help ...我希望将数据更新为DOM ..

2 个答案:

答案 0 :(得分:1)

这样的事情应该有效。

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();    

答案 1 :(得分:0)

您在get_stock_data来电中致电setInterval。所以它只被调用一次。您实际上已将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(或大约)毫秒调用一次。