2014-01-25 4 views
2

Я хотел бы поблагодарить вас за любую помощь, которую вы можете предложить.Замедление работы jQuery JSON?

Со всем увлечением криптовалютами я хотел сделать конвертер USD to DOGE для веб-сайта, который я имел в виду. Это мой первый раз с использованием jQuery.

Сценарий конвертирует $ 11 USD (цена услуги, которую я хочу предложить) и преобразует его в биткойн. Затем он преобразует биткойн (стоимостью 11 долларов США) в Dogecoin.

Проблема в том, что примерно половина времени, число, которое возвращает скрипт и добавляет в текст «цена» 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() в область, которая вызывается, когда оба URL-адреса получены? – user2532915

+0

@ user2532915 № См. Мое последнее редактирование. – Brad

+0

Не было бы btc.price и doge.price здесь, так как btc и doge являются массивами, содержащими объект? – Jay

Смежные вопросы