延迟加载页面,直到收到AJAX调用

时间:2017-10-09 21:38:59

标签: javascript jquery html ajax

我有一个计算比特币挖掘盈利能力的程序,因此需要比特币的实时价格,但我也希望用户能够在最初加载后编辑价格作为实时价格。

我遇到的问题是,当我运行我的代码时,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秒如果有人比我聪明,知道一个更好的解决方案我的耳朵是敞开的

3 个答案:

答案 0 :(得分:0)

所以有几件事情。

  • 您的第一个标签是无效的。头标签需要 包含适当的内容。 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head
  • 移动脚本标记内的所有javascript
  • function getVal(){格式不正确,语法无效。你错过了一个结束括号
  • 在进行AJAX调用后,不要尝试设置bpv,而是更新DOM的值document.getElementById("bp").value = data.USD.last

答案 1 :(得分:0)

Ajax调用是异步的。因此,在完成调用时,页面的其余部分将始终执行。我不确定你要完成什么,但如果你想在输入框中显示比特币的价值,然后让用户在加载后更改它,你可以遵循以下内容:

  • 开始时禁用输​​入框;
  • 使用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
});