我有一个计算比特币挖掘盈利能力的程序,因此需要比特币的实时价格,但我也希望用户能够在最初加载后编辑价格作为实时价格。
我遇到的问题是,当我运行我的代码时,bpv最初是未定义的,即使它应该在主体加载时调用,但是ajax调用没有问题,因为一旦在主体加载后运行更新,bpv被定义。
我怀疑这是因为ajax调用需要比页面加载更长的时间,因为bpv未定义,然后当我运行update()时代码已经初始化,因此没有延迟。
我还怀疑会解决这个问题,就是让页面等待加载直到ajax调用被发送回来,但我无法想象这可以扩展吗?
我对此很陌生,所以试着对我很轻松,谢谢。
<head>
var bpv;
function update(){
getVal();
getPrice();
function getPrice(){
$.ajax({
dataType:"json",
type: 'GET',
url:'https://blockchain.info/ticker',
success: function(data){
bpv = data.USD.last;
}
});
}
}
</head>
<body onload = "update()" >
<script>
function getVal(){
//Current Value of Bitcoin
bpv = document.getElementById("bp").value;
</script>
Value of Bitcoin ($)<br/>
<input type="text" id="bp" onKeyDown="getVal()" onKeyUp="getVal()" value="" ><br/>
编辑:我使用了Alex的解决方案,虽然它只修复了显示未定义的输入,而不是计算的最终结果,所以如果在我再次运行计算的地方实现了一个非常笨拙的解决方案,那么页面之后的.1秒如果有人比我聪明,知道一个更好的解决方案我的耳朵是敞开的
答案 0 :(得分:0)
所以有几件事情。
function getVal(){
格式不正确,语法无效。你错过了一个结束括号document.getElementById("bp").value = data.USD.last
答案 1 :(得分:0)
Ajax调用是异步的。因此,在完成调用时,页面的其余部分将始终执行。我不确定你要完成什么,但如果你想在输入框中显示比特币的价值,然后让用户在加载后更改它,你可以遵循以下内容:
这可能看起来像: (我正在删除部分代码以举例说明,但如果您有任何问题请告诉我)
<head>
<script>
var bpv;
document.addEventListener("DOMContentLoaded", function(event) {
getPrice();
});
function getPrice(){
$.ajax({
dataType:"json",
type: 'GET',
url:'https://blockchain.info/ticker',
success: function(data){
bpv = data.USD.last;
setPriceInput(bpv);
}
});
}
function setPriceInput(value) {
var input = document.getElementById('bp');
input.value = value;
input.disabled = false;
}
</script>
</head>
<body>
Value of Bitcoin ($)<br/>
<input type="text" id="bp" value="" disabled>
</body>
https://jsfiddle.net/81oqsk5x/1/
此解决方案将等待呈现页面,然后尝试获取价格。一旦价格从API响应,它将在输入上设置价格并再次启用它(如果您查看输入元素,它将启动为禁用)
答案 2 :(得分:-1)
始终将您的Jquery代码放在 Ready 功能
中$(document).ready(function(){
// your code here
});