从API自动重新加载localStorage数据

时间:2018-04-11 08:39:52

标签: javascript json api

我从JSON API获取数据,将其与用户输入相乘,然后将该数据存储在localStorage中。我希望更新数据,并在每次页面重新加载时重新相乘。我一直无法找到解决方案。这是我当前设置的链接

https://jsfiddle.net/GxPro/vffv7hhv/1/

HTML

<!DOCTYPE html>
<html>
<head>
    <title>Testing</title>
    <link rel="stylesheet" href="style.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>

<body>
    <div id='container'>
        <h2>Price of Bitcoin</h2>        
        <img src="img/BTC.png" />  
        <p id="lastPrice"></p>
        <h3>Your Holdings</h3>    
        <p id="userBTC"></p>
    </div>
    <br />

    <input type="number" id="userInput" />
    <button id = calculate>Enter the ammount of BTC you own</button>

    <script src="myScript.js"></script>
</body>
</html>

的Javascript

$.get("https://api.coinmarketcap.com/v1/ticker/", function (data) {
  for (var i = 0; i < data.length - 1; i++) {
    if (data[i].symbol == "BTC") {
      var price = JSON.parse(data[i].price_usd);
      $("#lastPrice").html("$" + price); //last Price
    }
  }

  document.getElementById("calculate").onclick = function calculate() {
    var text = document.getElementById('userInput').value;
    var userAmmount = text * price;
    localStorage.btc = "$" + userAmmount.toFixed(2) + " (" + text + " BTC)"; 
    $("#userBTC").html(localStorage.btc); 
  }
  $("#userBTC").html(localStorage.btc);
});

2 个答案:

答案 0 :(得分:0)

我建议您只存储btc的数量,而不是整个字符串。然后,当您调用API时,检查localStorage是否具有该属性,使用它来计算结果。我更新了jsfiddle:https://jsfiddle.net/vffv7hhv/18/

  $.get("https://api.coinmarketcap.com/v1/ticker/", function(data) {
    for (var i = 0; i < data.length - 1; i++) {
      if (data[i].symbol == "BTC") {
        var price = JSON.parse(data[i].price_usd);
        $("#lastPrice").html("$" + price); //last Price
        if (localStorage.btc) {
          $("#userBTC").html(calHolding(localStorage.btc, price));
        }
      }
    }

    document.getElementById("calculate").onclick = function calculate() {
      var text = document.getElementById('userInput').value;
      localStorage.btc = text;
      $("#userBTC").html(calHolding(text, price));
    }

    function calHolding(amount, price) {
      return "$" + (amount * price).toFixed(2) + " (" + amount + " BTC)";
    }
  });

答案 1 :(得分:0)

考虑您的代码行:

localStorage.btc

我认为您希望将数据存储在localStorage.btc变量中,并且每当用户单击按钮时,您希望每次都将该数据相乘。根据您的代码发生的情况是,每次用户单击按钮时,localStorage.btc中存储的数据都会被覆盖。

所以,不要这样做,而是 我会说你做了以下事情:

  • 在localStorage中再使用一个变量作为临时数据保护程序
  • 然后将localStorage.btc变量与新收到的数据相乘
  • 然后再次将// [[Rcpp::depends(RcppArmadillo)]] #include <RcppArmadillo.h> // [[Rcpp::export]] arma::sp_mat mult_sp_den_to_sp(arma::sp_mat& a, arma::mat& b) { // sparse x dense -> sparse arma::sp_mat result(a * b); return result; } // [[Rcpp::export]] arma::sp_mat mult_den_sp_to_sp(arma::mat& a, arma::sp_mat& b) { // dense x sparse -> sparse arma::sp_mat result(a * b); return result; } 存储到临时数据保护程序

通过这种方式,您将能够保持乘以必要的值。