我在这个jQuery API函数中做错了什么?

时间:2018-01-21 11:00:18

标签: jquery html api

Goodmorning everyone,

我目前在使用jQuery代码时遇到了一些问题。 我正在尝试使用cryptokickoff处的CoinMarketCap API在我的网站上显示加密货币的统计数据。我知道如何显示它们,但是附加到我的列不能正常工作。

我想做的事情:   - 我给出了一个数组,其中包含了我想要从API中显示的加密内容   - 我想将每个加密附加到一行,从0开始(var i)并且每个加密都加一行

现在发生的事情是所有的加密都被放入id crypto-3的行中,我不知道这是怎么回事。

任何帮助都将受到高度赞赏!



function fillGrid() {
	var cryptos = ["bitcoin","ethereum","ripple"];
	var i = 0;
	jQuery(cryptos).each(function(){
		jQuery.get( "https://api.coinmarketcap.com/v1/ticker/"+cryptos[i]+"/", function( data ) {
		    jQuery("#crypto-"+i).append(
		    	data[0].name);
		});
		i++;
	})
};

<!DOCTYPE html>
<html>
<head>
  <title>Page Title</title>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css" integrity="sha384-Zug+QiDoJOrZ5t4lssLdxGhVrurbmBWopoEl+M6BdEfwnCJZtKxi1KgxUyJq13dy" crossorigin="anonymous">
  <script src="http://code.jquery.com/jquery-latest.min.js"
        type="text/javascript"></script>
  <script src="api.js" type="text/javascript"></script>
</head>
<body>
  <div class="container-fluid">
    <div class="row">
      <div class="col-sm-12 col-md-6 col-lg-4" id="crypto-0">
      </div>
      <div class="col-sm-12 col-md-6 col-lg-4" id="crypto-1">
      </div>
      <div class="col-sm-12 col-md-6 col-lg-4" id="crypto-2">
      </div>
    </div>
    <div class="row">
      <div class="col-sm-12 col-md-6 col-lg-4" id="crypto-3">
      </div>
      <div class="col-sm-12 col-md-6 col-lg-4" id="crypto-4">
      </div>
      <div class="col-sm-12 col-md-6 col-lg-4" id="crypto-5">
      </div>
    </div>
  </div>
<script type="text/javascript">
  fillGrid();
</script>
</body>
</html>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

jQuery&#39; s .each通常用于迭代jQuery对象的成员(例如,如果我选择jQuery("[id^=crypto"),我会使用.each来迭代这些对象)。使用vanilla JS forEach循环代替迭代会更快。

这会在包含el的函数的调用堆栈中维护i.get的值,因此在触发回调之前迭代器不会被更改。

function fillGrid() {
    var cryptos = ["bitcoin","ethereum","ripple"];
    cryptos.forEach(function(el, i)
    {
        jQuery.get("https://api.coinmarketcap.com/v1/ticker/" + el + "/", function(data)
            {
                jQuery("#crypto-" + i).append(data[0].name);
            }
        );
    });
};