晚间互联网世界,
首先发帖在这里温柔,到目前为止我从这个网站上学到了很多东西......现在我寻求帮助..
我尝试了一些代码,例如$ when& $ then,功能在功能,但我无法得到我寻求的结果,它不结合结果。所以最好在这里问问并展示我的代码..请帮助..
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row" id="stats">
<div class="col-4 col-12-large">
<h4><strong>Ether contributed</strong></h4>
<span id="eth_balance" style="font-size: 2.5em;">—</span>
<!--<p id="total-ether-message" style="font-size:11px;"></p>-->
</div>
<div class="col-4 col-12-large">
<h4><strong>Contributions in USD</strong></h4>
<span id="token_usd" style="font-size: 2.5em;">—</span>
<!--<p id="total-usd-message" style="font-size:11px;"></p>-->
</div>
<div class="col-4 col-12-large">
<h4><strong>Tokens issued</strong></h4>
<span id="token_amount" style="font-size: 2.5em;">—</span>
<!-- <p id="total-tokens-message" style="font-size:11px;"></p> -->
</div>
</div>
JS
var token = '0xa74476443119A942dE498590Fe1f2454d7D4aC0d';
var address = '0xda0aed568d9a2dbdcbafc1576fedc633d28eee9a';
$.get("https://api.tokenbalance.com/token/" + token + "/" + address +'', function(data) {
$("#eth_balance").html(Math.round(data.eth_balance).toFixed(2) + " ETH");
$("#token_amount").html(Math.round(data.balance).toFixed(2) + " " + data.symbol);
});
$.get("https://api.etherscan.io/api?module=stats&action=ethprice", function(data) {
$("#token_usd").html("$ " + Math.round(data.result.ethusd).toFixed(2));
// Ideally I'd like to get [ data.result.ethusd x data.eth_balance ] to replace #token_usd, all wrapped in one function
alert(data.result.ethusd)
});
或者你可以在这里玩
答案 0 :(得分:0)
您可以在第一个中移动第二个ajax调用,并将data
中的值存储在一个可用于内部函数的变量中。
就像这样(第二次通话不会在这里或在小提琴中起作用):
var token = '0xa74476443119A942dE498590Fe1f2454d7D4aC0d';
var address = '0xda0aed568d9a2dbdcbafc1576fedc633d28eee9a';
$.get("https://api.tokenbalance.com/token/" + token + "/" + address + '', function (data) {
var eth_balance = data.eth_balance;
$("#eth_balance").html(Math.round(data.eth_balance).toFixed(2) + " ETH");
$("#token_amount").html(Math.round(data.balance).toFixed(2) + " " + data.symbol);
$.get("https://api.etherscan.io/api?module=stats&action=ethprice", function (data) {
$("#token_usd").html("$ " + Math.round(data.result.ethusd * eth_balance).toFixed(2));
// Ideally I'd like to get [ data.result.ethusd x data.eth_balance ] to replace #token_usd, all wrapped in one function
alert(data.result.ethusd)
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row" id="stats">
<div class="col-4 col-12-large">
<h4>
<strong>Ether contributed</strong>
</h4>
<span id="eth_balance" style="font-size: 2.5em;">—</span>
<!--<p id="total-ether-message" style="font-size:11px;"></p>-->
</div>
<div class="col-4 col-12-large">
<h4>
<strong>Contributions in USD</strong>
</h4>
<span id="token_usd" style="font-size: 2.5em;">—</span>
<!--<p id="total-usd-message" style="font-size:11px;"></p>-->
</div>
<div class="col-4 col-12-large">
<h4>
<strong>Tokens issued</strong>
</h4>
<span id="token_amount" style="font-size: 2.5em;">—</span>
<!-- <p id="total-tokens-message" style="font-size:11px;"></p> -->
</div>
</div>
答案 1 :(得分:-1)
听起来你正在寻找的是Promise.all()
(在vanilla JavaScript中)或$.when()
(在jQuery中)。
这是一个更新的jQuery小提琴:https://jsfiddle.net/j5L54100/10/
一个有效的香草版本:https://jsfiddle.net/6Lwo7rs4/8/
在jQuery中:
var promise1 = $.get("https://api.tokenbalance.com/token/" + token + "/" + address);
var promise2 = $.get("https://api.etherscan.io/api?module=stats&action=ethprice");
$.when(promise1, promise2).then(function(p1Data, p2Data) {
// do stuff with the data
}).catch(function (error) {
// error handling
});
Vanilla JS(注意,使用这样的JSON你还需要response.json()
,请看小提琴和https://developer.mozilla.org/en-US/docs/Web/API/Body/json):
var promise1 = fetch("https://api.tokenbalance.com/token/" + token + "/" + address);
var promise2 = fetch("https://api.etherscan.io/api?module=stats&action=ethprice");
Promise.all([promise1, promise2]).then(function(combinedData) {
// do stuff with the data
}).catch(function (error) {
// error handling
});
基本上正在发生的是$.get
和fetch
返回promises(一个表示异步操作状态的对象,其回调处理不同的响应,例如{{1 }或success
)。 failure
/ when
本身就是一个等待履行所有承诺或承诺失败的承诺。如果它给出的承诺成功,则调用all
函数。如果其中一个承诺失败,则会调用then
函数。
另一个选择是链接请求:
catch
在ES6中看起来很棒:
var url1 = "https://api.tokenbalance.com/token/" + token + "/" + address;
var url2 = "https://api.etherscan.io/api?module=stats&action=ethprice";
fetch(url1)
.then(function(data1) {
return fetch(url2);
})
.then(function(data2) {
// do stuff with data1 and data2
})
.catch(function (error) {
// handle errors
});
承诺超级棒,令人困惑。我建议在进一步深入承诺之前,先查看获取资源以获得一般性的想法。
抓取:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
承诺:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
Promise.all():https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
jQuery.when():https://api.jquery.com/jquery.when/