试图获取标签的最新innerHTML文本

时间:2015-05-20 18:21:41

标签: javascript

我有一个函数可以在单击按钮时查询数据库的信息。此信息将写入标签的innerHTML。当这个函数返回时,我读了这个标签的innerHTML。问题是,它总是返回旧值,而不是从数据库中提取的新值。但是,scree上的标签显示的是正确的值。当我再次单击该按钮时,现在给出了我在前一次单击时所期望的值。似乎是一个时间问题,但似乎无法弄明白。 例: SQL数据 - 成本= 10

当我点击按钮时,我希望看到10警告我。我收到了一个空白警告,即使10现在在标签中。当我再次单击该按钮时,会提示10,但现在标签中有20个。

function getInfo() {
    var ctlMonthly = document.getElementById("cellMonthlyCost")
    getSQLData(ctlMonthly);
    alert(ctlMonthly.innerHTML);
} 

function getSQLData(ctlCell){
    ...
    var my_ctlCell = document.getElementById(ctlCell);
    $.each(objData.items, function() {
      my_ctlCell.innerHTML = this.Param1
    });
    ...
}

感谢。

3 个答案:

答案 0 :(得分:1)

您需要在从数据库收到数据后添加警报。我假设你发送一个ajax请求来获取数据。您将能够在回调中获取新值,这是您的ajax请求函数。 目前,您的代码中发生的是

1.  getSQLData(ctlMonthly);
// This sends a request to the data base to fetch data
2. alert(ctlMonthly.innerHTML);
// This shows the current value in an alert
3. data is received and shown in the label

此过程发生得太快,您没有注意到第2步和第3步之间的区别。

答案 1 :(得分:1)

这是你想要的吗? 我使用了回调函数

    function getInfo() {
         var ctlMonthly = document.getElementById("cellMonthlyCost")
         getSQLData(ctlMonthly,alertInfo);

    } 
    function alertInfo(info){
        alert(info);
    }
    function getSQLDate(ctlCell,callbackFn){
        ...
        var my_ctlCell = document.getElementById(ctlCell);
        $.each(objData.items, function() {
          my_ctlCell.innerHTML = this.Param1;
          callbackFn(this.Param1);
        });
        ...
    }

答案 2 :(得分:0)

搭载Himanshu的回答,您对服务器的请求是异步的。意思是javascript将执行GET请求并继续使用脚本,当请求从服务器返回时,它将运行您提供的任何回调。 (即更新标签标签)

假设getSQLData是一个ajax调用或基于承诺的东西,如:

function getSQLData(ctlCell){
  return $.get('/sql/data').done(function () {
    var my_ctlCell = document.getElementById(ctlCell);
    $.each(objData.items, function() {
      my_ctlCell.innerHTML = this.Param1
    });
  });
}

您可以将代码更改为:

function getInfo() {
  var ctlMonthly = document.getElementById("cellMonthlyCost")
  getSQLData(ctlMonthly)
    .done(function () {
      alert(ctlMonthly.innerHTML);
    });
}

基本上不同之处在于,在请求从服务器返回后,您可以通过javascript警告innerHTML

更正确的答案是直接从响应中提醒数据,而不是从DOM中读取数据。