我发现了实时JSON自动收录器的这种实现 FTC/BTC BTC-e realtime ticker JSFiddle 你可以看到它工作正常。
但我需要实时获取本网站的所有代码。 我接着做(html):
<div>BTC/USD <span id="p0"></span></div>
<div>BTC/RUR <span id="p1"></span></div>
<div>BTC/EUR <span id="p2"></span></div>
<div>LTC/BTC <span id="p3"></span></div>
<div>LTC/USD <span id="p4"></span></div>
<div>LTC/RUR <span id="p5"></span></div>
<div>USD/RUR <span id="p6"></span></div>
<div>EUR/USD <span id="p7"></span></div>
<div>NMC/BTC <span id="p8"></span></div>
<div>NVC/BTC <span id="p9"></span></div>
<div>TRC/BTC <span id="p10"></span></div>
<div>PPC/BTC <span id="p11"></span></div>
<div>FTC/BTC <span id="p12"></span></div>
接下来(js):
$(function (){
startRefresh();
});
function startRefresh() {
setTimeout(startRefresh, 10000);
var ops = new Array('https://btc-e.com/api/2/btc_usd/ticker','https://btc-e.com/api/2/btc_eur/ticker','https://btc-e.com/api/2/btc_rur/ticker','https://btc-e.com/api/2/ltc_btc/ticker','https://btc-e.com/api/2/ltc_usd/ticker','https://btc-e.com/api/2/ltc_rur/ticker','https://btc-e.com/api/2/usd_rur/ticker','https://btc-e.com/api/2/eur_usd/ticker','https://btc-e.com/api/2/nmc_btc/ticker','https://btc-e.com/api/2/nvc_btc/ticker','https://btc-e.com/api/2/trc_btc/ticker','https://btc-e.com/api/2/ppc_btc/ticker','https://btc-e.com/api/2/ftc_btc/ticker');
for(var i = 0; i < ops.length; i++) {
$.getJSON('http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%3D%22' + encodeURIComponent(ops[i]) + '%22&format=json', function (data) {
$('#p'+i).html(parseFloat(data['query'].results.ticker.last).toFixed(6));
});
}
它不起作用。 我怎样才能实时获得所有代码?
答案 0 :(得分:1)
变量i
已在回调执行时重新分配(实际上是13次)。在您的请求完成时,i
设置为13
。 13
代替12
因为i++
在循环关闭之前最后一次执行。由于#p13
不存在,您看不到任何事情发生。
您需要重新构建代码,或使用JavaScript closures。
这是一个用于修正脚本的闭包的示例:
for(var i = 0; i < ops.length; i++) {
// Create a custom callback
var callback = (function(){
// Assign i to a local variable j
var j = i;
// Create a callback function with our local variable j
return function(data){
$('#p'+j).html(parseFloat(data['query'].results.ticker.last).toFixed(6));
}
})();
// Give our new "custom" callback as the second argument
$.getJSON('http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%3D%22' + encodeURIComponent(ops[i]) + '%22&format=json', callback);
}