Javascript jQuery只在第一页加载时上载元素
我知道问题与Javascript jQuery只在第一页加载时上载元素,javascript,callback,Javascript,Callback,我知道问题与$(document.ready(function(){})有关或者我没有正确使用回调 我正试图按此顺序运行getTotalMarketCap(),getAllOtherValues(),和getMarketShare(),以便计算和显示市场份额。市场份额仅在60秒后才在表中更新 代码如下: 虽然我最初写这篇文章是为了修复这个bug,但我可以做哪些更改来提高代码质量?也许可以使用setTimeout? 然后,您可以设置代码刷新模式。您可以尝试以下方法: // Formats numb
$(document.ready(function(){})有关代码>或者我没有正确使用回调
我正试图按此顺序运行getTotalMarketCap()
,getAllOtherValues()
,和getMarketShare()
,以便计算和显示市场份额。市场份额仅在60秒后才在表中更新
代码如下:
虽然我最初写这篇文章是为了修复这个bug,但我可以做哪些更改来提高代码质量?也许可以使用setTimeout?
然后,您可以设置代码刷新模式。您可以尝试以下方法:
// Formats numbers with commas.
String.prototype.commafy = function()
{
return this.replace(/ (^|[^\w.])(\d{ 4,})/ g, function($0, $1, $2) {
return $1 + $2.replace(/\d(?= (?:\d\d\d) + (? !\d))/ g, "$&,");
});
};
/**
* Rounds decimals.
* @param {number} num - The number to round...
* @param {number} scale - How many decimal places?
*/
function fixed (num, scale) {
return (+(Math.round(+(num + "e" + scale)) + "e" + -scale)).toFixed(scale);
}
var totalCap;
var totalCapTemp;
var bitcoinPriceTemp;
var bccPriceTemp;
var bitcoinMarketCap;
var bccMarketCap;
var bitcoinMarketCapTemp;
var bccMarketCapTemp;
var bitcoinMarketShareTemp;
var bccMarketShareTemp;
var bitcoinMarketShare;
var bccMarketShare;
var bitcoinVolTemp;
var bccVolTemp;
var bitcoinChangeTemp;
var bccChangeTemp;
var bitcoinTxTemp;
var chart;
var myVar = setInterval(myTimer, 60000);
$(document).ready(function() {
myTimer();
});
function myTimer()
{
function runInOrder(callback)
{
getTotalMarketCap(function() {
getAllOtherValues(function() {
getMarketShare(callback);
});
});
}
runInOrder(createChart);
}
function getTotalMarketCap(callback)
{
$.getJSON("https://api.coinmarketcap.com/v1/global/", function(json) {
totalCap = fixed (parseFloat(json.total_market_cap_usd / 1000000000), 2);
if (!totalCapTemp || totalCapTemp == totalCap)
{
$("#totalCap")
.text("$" + totalCap + "B")
.removeClass();
}
else if (totalCap > totalCapTemp)
{
$("#totalCap")
.text("$" + totalCap + "B")
.removeClass()
.addClass("green");
}
else
{
$("#totalCap")
.text("$" + totalCap + "B")
.removeClass()
.addClass("red");
}
totalCapTemp = totalCap;
callback();
});
}
function getAllOtherValues(callback)
{
var lastInstruction = function(){
$.getJSON("https://api.blockchain.info/stats?cors=true", function(json) {
bitcoinTx = json.n_tx.toLocaleString();
if (!bitcoinTxTemp || bitcoinTxTemp == bitcoinTx)
{
$("#bitcoinTx")
.text(bitcoinTx)
.removeClass();
}
else if (parseInt(bitcoinTx) > parseInt(bitcoinTxTemp))
{
$("#bitcoinTx")
.text(bitcoinTx)
.removeClass()
.addClass("green");
}
else
{
$("#bitcoinTx")
.text(bitcoinTx)
.removeClass()
.addClass("red");
}
bitcoinTxTemp = bitcoinTx;
callback();
});
};
$.getJSON("https://api.coinmarketcap.com/v1/ticker/?limit=10", function(
json
) {
$.each(json, function(index, value) {
if (value.id == "bitcoin")
{
bitcoinPrice = fixed (parseFloat(value.price_usd), 2);
if (!bitcoinPriceTemp || bitcoinPriceTemp == bitcoinPrice)
{
$("#bitcoinPrice")
.text("$" + bitcoinPrice.toLocaleString().commafy())
.removeClass();
}
else if (bitcoinPrice > bitcoinPriceTemp)
{
$("#bitcoinPrice")
.text("$" + bitcoinPrice.toLocaleString().commafy())
.removeClass()
.addClass("green");
}
else
{
$("#bitcoinPrice")
.text("$" + bitcoinPrice.toLocaleString().commafy())
.removeClass()
.addClass("red");
}
bitcoinPriceTemp = parseFloat(bitcoinPrice);
bitcoinVol = parseInt(value["24h_volume_usd"]);
if (!bitcoinVolTemp || bitcoinVolTemp == bitcoinVol)
{
$("#bitcoinVol")
.text("$" + bitcoinVol.toLocaleString().commafy())
.removeClass();
}
else if (bitcoinVol > bitcoinVolTemp)
{
$("#bitcoinVol")
.text("$" + bitcoinVol.toLocaleString().commafy())
.removeClass()
.addClass("green");
}
else
{
$("#bitcoinVol")
.text("$" + bitcoinVol.toLocaleString().commafy())
.removeClass()
.addClass("red");
}
bitcoinVolTemp = parseInt(bitcoinVol);
bitcoinChange = fixed (parseFloat(value.percent_change_24h), 2);
if (!bitcoinChangeTemp || bitcoinChangeTemp == bitcoinChange)
{
$("#bitcoinChange")
.text(bitcoinChange.commafy() + "%")
.removeClass();
}
else if (parseFloat(bitcoinChange) > parseFloat(bitcoinChangeTemp))
{
$("#bitcoinChange")
.text(bitcoinChange.commafy() + "%")
.removeClass()
.addClass("green");
}
else
{
$("#bitcoinChange")
.text(bitcoinChange.commafy() + "%")
.removeClass()
.addClass("red");
}
bitcoinChangeTemp = bitcoinChange;
bitcoinMarketCap = parseInt(value.market_cap_usd);
if (!bitcoinMarketCapTemp)
{
$("#bitcoinMarketCap")
.text("$" + bitcoinMarketCap.toLocaleString())
.removeClass();
}
else if (bitcoinMarketCapTemp == bitcoinMarketCap)
{
$("#bitcoinMarketCap")
.text("$" + bitcoinMarketCap.toLocaleString())
.removeClass();
}
else if (bitcoinMarketCap > bitcoinMarketCapTemp)
{
$("#bitcoinMarketCap")
.text("$" + bitcoinMarketCap.toLocaleString())
.removeClass()
.addClass("green");
}
else
{
$("#bitcoinMarketCap")
.text("$" + bitcoinMarketCap.toLocaleString())
.removeClass()
.addClass("red");
}
bitcoinMarketCapTemp = bitcoinMarketCap;
}
if (value.id == "bitcoin-cash")
{
bccPrice = fixed (parseFloat(value.price_usd), 2);
if (!bccPriceTemp || bccPriceTemp == bccPrice)
{
$("#bccPrice")
.text("$" + bccPrice.toLocaleString().commafy())
.removeClass();
}
else if (bccPrice > bccPriceTemp)
{
$("#bccPrice")
.text("$" + bccPrice.toLocaleString().commafy())
.removeClass()
.addClass("green");
}
else
{
$("#bccPrice")
.text("$" + bccPrice.toLocaleString().commafy())
.removeClass()
.addClass("red");
}
bccPriceTemp = parseFloat(bccPrice);
bccVol = parseInt(value["24h_volume_usd"]);
if (!bccVolTemp || bccVolTemp == bccVol)
{
$("#bccVol")
.text("$" + bccVol.toLocaleString().commafy())
.removeClass();
}
else if (bccVol > bccVolTemp)
{
$("#bccVol")
.text("$" + bccVol.toLocaleString().commafy())
.removeClass()
.addClass("green");
}
else
{
$("#bccVol")
.text("$" + bccVol.toLocaleString().commafy())
.removeClass()
.addClass("red");
}
bccVolTemp = parseInt(bccVol);
bccChange = fixed (parseFloat(value.percent_change_24h), 2);
if (!bccChangeTemp || bccChangeTemp == bccChange)
{
$("#bccChange")
.text(bccChange.commafy() + "%")
.removeClass();
}
else if (parseFloat(bccChange) > parseFloat(bccChangeTemp))
{
$("#bccChange")
.text(bccChange.commafy() + "%")
.removeClass()
.addClass("green");
}
else
{
$("#bccChange")
.text(bccChange.commafy() + "%")
.removeClass()
.addClass("red");
}
bccChangeTemp = bccChange;
bccMarketCap = parseInt(value.market_cap_usd);
if (!bccMarketCapTemp)
{
$("#bccMarketCap")
.text("$" + bccMarketCap.toLocaleString())
.removeClass();
}
else if (bccMarketCapTemp == bccMarketCap)
{
$("#bccMarketCap")
.text("$" + bccMarketCap.toLocaleString())
.removeClass();
}
else if (bccMarketCap > bccMarketCapTemp)
{
$("#bccMarketCap")
.text("$" + bccMarketCap.toLocaleString())
.removeClass()
.addClass("green");
}
else
{
$("#bccMarketCap")
.text("$" + bccMarketCap.toLocaleString())
.removeClass()
.addClass("red");
}
bccMarketCapTemp = bccMarketCap;
}
/// try (index >= json.length) if it doesn't work
if (index >= json.length - 1)
lastInstruction();
});
});
}
function getMarketShare(callback)
{
bitcoinMarketShare = fixed (bitcoinMarketCap* 0.0000001 / totalCap, 2);
if (!bitcoinMarketShareTemp || bitcoinMarketShareTemp == bitcoinMarketShare)
{
$("#bitcoinMarketShare")
.text(bitcoinMarketShare + "%")
.removeClass();
}
else if (bitcoinMarketShare > bitcoinMarketShareTemp)
{
$("#bitcoinMarketShare")
.text(bitcoinMarketShare + "%")
.removeClass()
.addClass("green");
chart.update();
}
else
{
$("#bitcoinMarketShare")
.text(bitcoinMarketShare + "%")
.removeClass()
.addClass("red");
chart.update();
}
bitcoinMarketShareTemp = bitcoinMarketShare;
bccMarketShare = fixed (bccMarketCap* 0.0000001 / totalCap, 2);
if (!bccMarketShareTemp || bccMarketShareTemp == bccMarketShare)
{
$("#bccMarketShare")
.text(bccMarketShare + "%")
.removeClass();
}
else if (bccMarketShare > bccMarketShareTemp)
{
$("#bccMarketShare")
.text(bccMarketShare + "%")
.removeClass()
.addClass("green");
chart.update();
}
else
{
$("#bccMarketShare")
.text(bccMarketShare + "%")
.removeClass()
.addClass("red");
chart.update();
}
bccMarketShareTemp = bccMarketShare;
callback && callback();
}
function createChart()
{
$(function() {
Chart.defaults.global.legend.display = false;
Chart.defaults.global.animation.duration = 0;
var ctx = document.getElementById("myChart").getContext("2d");
$("#myChart").css("background-color", "#222428");
chart = new Chart(ctx, {
// The type of chart we want to create
type: "doughnut",
// The data for our dataset
data: {
labels: ["Bitcoin", "Bitcoin Cash", "Others"],
datasets: [
{
label: "dataset",
backgroundColor: ["#2196f3", "#f44336", "#FFFFFF"],
borderColor: "#000000",
data: [
bitcoinMarketShare,
bccMarketShare,
fixed (100 - bccMarketShare - bitcoinMarketShare, 2)
]
}
]
},
// Configuration options go here
options:
{
cutoutPercentage: 70,
rotation: 185
}
});
});
}
您需要在$.getJSON的成功处理程序中调用回调函数在此处包含您的代码。如果您当前的代码太大,请将其缩减到一个合适的大小,这样才能工作,问题的全部内容必须在您的问题中,而不仅仅是链接。链接会腐烂,使得问题及其答案对未来的人们来说毫无用处,人们不应该非得离开网站去帮助你。请在问题中添加一个,最好使用堆栈片段(工具栏按钮)使其可运行()。更多:我可以做哪些更改来提高代码质量?
-这些类型的问题并不真正适合,因为它们是主观的,导致讨论,而不是正确的答案。-在你正在经历的问题上坚持功能性问题如果你想改进代码,像这样的网站可能会更好。