放慢jQuery JSON解析?

时间:2014-01-25 20:35:14

标签: javascript jquery json

我想感谢您提供的任何帮助。

由于所有的加密货币热潮,我想为我想到的网站制作一个USD到DOGE的转换器。这是我第一次使用jQuery。

脚本转换$ 11 USD(我想提供的服务价格)并将其转换为比特币。然后它将比特币(价值11美元)转换为狗狗币。

问题是,大约一半的时间,脚本返回并添加到“price”h1文本的数量为0.如何为JSON解析提供更多时间,以便脚本不显示0数量?或者还有其他我不知道的问题吗?

var $BTCUSD = '';
var $BTC = '';
var $DOGEBTC = '';
var $DOGE = '';
var $price = '';

$.getJSON('http://www.cryptocoincharts.info/v2/api/tradingPair/btc_usd', function(btc) {
        $BTCUSD = btc.price;
        $BTC = 11 / $BTCUSD;
    });

$.getJSON('http://www.cryptocoincharts.info/v2/api/tradingPair/doge_btc', function(doge) {
        $DOGEBTC = doge.price;
        $DOGE = $BTC / $DOGEBTC;
        $price = parseFloat($DOGE.toPrecision(2));
        // output
        document.getElementById('price').innerHTML = $price;
    });

1 个答案:

答案 0 :(得分:9)

你绝对不想放慢速度。您的问题是您没有按正确的顺序获取数据。一个简单的解决方案是连续发出你的AJAX请求,但是你却浪费时间,因为你当然可以同时获得这两个请求。

最佳解决方案是使用jQuery's Deferred objectjQuery.when()

$.when(
  $.getJSON('http://www.cryptocoincharts.info/v2/api/tradingPair/btc_usd'), 
  $.getJSON('http://www.cryptocoincharts.info/v2/api/tradingPair/doge_btc')
).done(function(btc, doge) {
  // This gets called when both URLs have been retrieved.
  $('#price').text((11/btc.price) / doge.price); // Modify as necessary
});

此外,如果您将来需要使用一系列Deferred,请参阅此帖子:https://stackoverflow.com/a/5627301/362536