2017-02-13 18 views
0

我從bitcoinaverage.com的API中提取數據並將其保存爲var'price'。如何在JS函數中使用JSON數據?

後來我想在計算中使用它在JS做的但它不起作用,只適用於如果我把靜態整數,而不是動態'價格'

我試過pasteInt()在價格上,它仍然無法正常工作。關於我可能做錯什麼的想法? https://jsfiddle.net/7b2jaLxh/

var xbtc = new XMLHttpRequest(); 
xbtc.open('GET', 'https://api.bitcoinaverage.com/ticker/global/CAD/', true); 
xbtc.onreadystatechange = function(){ 
    if(xbtc.readyState == 4){ 
     var ticker = JSON.parse(xbtc.responseText); 
     price = ticker.last; 
    } 
}; 
xbtc.send(); 

這裏的JS那裏IM使用價格變量:(底部)

var directionSlider = document.getElementById('slider-direction'); 

noUiSlider.create(directionSlider, { 
    start: 20, 
    connect: [true, false], 
    direction: 'ltr', 
    range: { 
     'min': 2, 
     'max': 99.99 
    } 
}); 
var cadc = document.getElementById('cadc'); 
var btcc = document.getElementById('btcc'); 

directionSlider.noUiSlider.on('update', function(values, handle) { 
    cadc.value = directionSlider.noUiSlider.get(); 
    cadConvert(); 
}); 

cadc.addEventListener('change', function(){ 
    directionSlider.noUiSlider.set(this.value); 
    cadConvert(); 
}); 
btcc.addEventListener('change', function(e){ 
    directionSlider.noUiSlider.set(this.value*price); 
}); 
function cadConvert() { 
    var cad = directionSlider.noUiSlider.get(); 
    var cadCalc = cad/price; 
    document.getElementById("btcc").value = cadCalc; 

} 
+0

價格最初是在哪裏申報的?看起來你可能試圖在範圍之外使用'price' – dargue3

+0

我將它保存在一個名爲price.js的文件中,但我在html中調用了運行js。 – NipBoss

+0

您可以告訴我們您的cadConvert()函數中價格的價值是什麼?設置一個斷點或做一個console.log。 – Chris

回答

1

嘗試改變cad變量賦值到這一點:

var cad = parseFloat(directionSlider.noUiSlider.get());

這是因爲滑塊最有可能以字符串形式返回值,而不是浮點數int數。


修訂答:

我做了console.log(cad, typeof cad);,它確實是多數民衆贊成從您的滑塊返回一個字符串值,所以我改變了代碼如下:

function cadConvert() { 
    if(!price) return; 
    var cad = parseFloat(directionSlider.noUiSlider.get()); 
    var cadCalc = cad/price; 
    document.getElementById("btcc").value = cadCalc; 
} 

我測試過了,你的滑塊現在工作正常。試試這個更新小提琴:

https://jsfiddle.net/5pxvvmdL/

另外,我在附近的其他聲明頂部增加了一個var price;聲明,只是代碼的可讀性目的,甚至當你分配在Javascript中的變量雖然沒有使用自動var它被聲明爲一個全局變量,如果你在代碼中明確地使用var在全局範圍內(任何函數之外)聲明你的全局變量,那麼這是最好的。如前所述,僅用於代碼可讀性目的。

Additonally,我在price.js註釋掉document.getElementById('btc').innerHTML = "Global Market: $" + (price).toFixed(2) + " CAD";線作爲有在文檔中沒有「BTC」層,因此它被引發錯誤。

最後,我在onreadystatechange事件中添加了一個對cadConvert()的調用,以便使用默認滑塊價格在默認比特幣價格加載後立即顯示。

+0

不,不幸的是,這不是它,這是行不通的。 – NipBoss

+0

試着在'cadConvert(){'後面加上這段代碼,這樣你就可以清楚地看到接收到哪些值和哪些類型: 'console。info('cad:',cad,(typeof cad));' 'console.info('price:',price,(typeof price));' 然後粘貼到評論的輸出中,這樣我們就可以看到這是怎麼回事。 – ablopez

+0

請檢查https://jsfiddle.net/7b2jaLxh/。 – NipBoss