2014-01-25 39 views
2

我想感謝您提供的任何幫助。放慢jQuery JSON解析?

隨着所有的加密貨幣熱潮,我想爲我想到的網站製作一個USD轉換爲DOGE轉換器。這是我第一次使用jQuery。

該腳本將$ 11 USD(我想要提供的服務的價格)轉換並轉換爲比特幣。然後它將比特幣(價值11美元)轉換爲狗狗幣。

問題是,大約一半的時間,腳本返回並添加到「價格」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; 
    }); 

回答

9

你絕對不想放慢速度。你的問題是你沒有以正確的順序獲取數據。一個簡單的解決方案是讓你的AJAX請求串行,但是你會浪費時間,因爲你可以同時獲得這兩個請求。

對此的最佳解決方案是使用jQuery's Deferred object以及jQuery.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 
}); 

另外,如果你需要Deferreds在未來的整個陣列的工作,看到這個帖子:https://stackoverflow.com/a/5627301/362536

+0

所以我把我的$ .getJSON()代碼到被調用時區這兩個網址都被檢索到了? – user2532915

+0

@ user2532915否請參閱我的最新編輯。 – Brad

+0

btc.price和doge.price在這裏沒有定義,因爲btc和doge是包含對象的數組? – Jay