在没有警报的情况下处理时未初始化的变量
Uninitialized variable when processing without alerts
我正在尝试用Javascript/jQuery/PHP构建一个日志读取器,它在ingrid表中显示文本文件的内容。
Javascript部分具有以下功能:
<script type="text/javascript">
$(function() {
// Count number of lines in the log file
var $anzahlElemente=0;
$.countLines = function() {
$.get("../log.log", function(text) {
var $lines = text.split(/'r|'r'n|'n/);
$anzahlElemente = $lines.length-1;
});
};
// Generate table
$.showTable = function() {
$("#table1").ingrid({
url: 'ingrid.php',
height: 625,
initialLoad: true,
rowClasses: ['grid-row-style1','grid-row-style1','grid-row-style2','grid-row-style1','grid-row-style1','grid-row-style3'],
sorting: false,
paging: true,
totalRecords: $anzahlElemente
});
}
$.countLines();
$.showTable();
});
</script>
现在的问题是,函数处理的顺序或顺序似乎有问题。在完成这两个功能之后,$anzahlElemente
仍然为0。需要CCD_ 2来显示表格分页功能。
奇怪的是,当我尝试以下操作时,第一个警报显示"0",第二个警报显示正确的行数。如果没有警报,则缺少元素数量和分页功能。但有了它们,一切都正常工作,除此之外,我不想有这些警报。)
$.countLines();
alert($anzahlElemente);
alert($anzahlElemente);
$.showTable();
你需要所有其他部分吗,比如html、php、css和图像,或者你直接看到我的错误了吗?
编辑:我希望可以附加文件。我没有找到上传选项,所以我这样做了:ingrid.zip
这个问题是对如何执行涉及异步I/O的javascript代码的常见误解。在您的代码中,由于$.get
是异步,在设置命名变量之前实际执行了showTable
您可以将代码更改为
var countLines = function(renderTable) {
$.get("../log.log", function(text) {
var $lines = text.split(/'r|'r'n|'n/);
showTable($lines.length-1)
});
};
// Generate table
var showTable = function(anzahlElemente) {
$("#table1").ingrid({
url: 'ingrid.php',
height: 625,
initialLoad: true,
rowClasses: ['grid-row-style1',
'grid-row-style1',
'grid-row-style2',
'grid-row-style1',
'grid-row-style1',
'grid-row-style3'],
sorting: false,
paging: true,
totalRecords: anzahlElemente
});
}
$(function() {
countLines(showTable);
});
以这种方式,CCD_ 4将仅在CCD_ 5成功时执行。
再详细一点。对countLines的调用实际上在对$.get
的调用之前结束,在您的代码中,您在$.get
调用执行回调之前执行对showTable的调用(匿名函数设置$anzahlElemente
)。当您插入警报时,您正在更改时间,使对所述回调的调用有足够的时间执行。
尝试$.countLines().end().showTable();
。
相关文章:
- 从javascript中再次初始化c变量
- 用真或假初始化变量是否在 Javascript 中建立了内容的方向
- 初始化变量时对其应用监视
- Javascript - 初始化变量
- JavaScript 中未初始化变量的范围
- 当 prompt() 方法用于初始化 javascript 中的变量时,初始化变量的类型是什么
- 如何在 jQuery 克隆/动画之前初始化变量
- JavaScript什么时候初始化变量
- 是否可以使用隐藏/额外的参数初始化变量
- 在JS中,除了使用var关键字之外,还有其他方法来初始化变量吗?
- Javascript:在递归函数中初始化变量一次(如静态变量)
- 使用[]初始化javascript变量和使用{}初始化变量有区别吗?
- 通过传递对函数的引用来初始化变量
- ()在javascript中用于初始化变量的用途是什么?
- 当chrome扩展加载一次时,运行一个JS方法来初始化变量
- 声明与初始化变量
- Javascript:在函数外部初始化变量,在函数内部使用
- 使用增量初始化变量
- 使用 $.get,需要在隐藏页面上初始化变量
- 在初始化变量时查询OR操作符