我有一个函数可以在单击按钮时查询数据库的信息。此信息将写入标签的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
});
...
}
感谢。
答案 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中读取数据。