我是jquery的绝对新手。所以这可能是一个非常基本的问题,请耐心等待。
我已经定义了一个jQuery函数,它创建了一个二维数组。
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
url: '/testdata.txt',
dataType: 'text',
success: function(data) {
var datatable = [];
// Populate datatable[]. This is a 2-d array.
$('#myTestDiv').text(datatable[2][0]);
},
error: function(){
alert('error!');
}
})
});
</script>
<body>
<table>
<thead>
</thead>
</table>
</body>
现在,我想在HTML表格中打印2-d数组&#34; datatable&#34;,最好是使用JSTL。但似乎&#34;数据表&#34;变量在外面无法访问。我知道表正在正确填充,$('#myTestDiv').text(datatable[2][0]);
正在打印预期输出。
如何实现这一目标?
非常感谢。
答案 0 :(得分:2)
从变量声明前面删除var
。这将导致变量被放置在全局window
对象上,使其可以从全部访问。但是要小心这种做法,因为污染你的全球背景是不受欢迎的。
答案 1 :(得分:0)
我建议您在datatable
函数之外声明.ajax()
变量,以便它在代码的其他部分中可见。
如果您知道它正确填充,那么这只是一个范围问题。
<强>更新强>
$(document).ready(function() {
var datatable = [];
$.ajax({
url: '/testdata.txt',
dataType: 'text',
success: function(data) {
var lines = data.split('\n');
$.each(lines, function(i, val) {
datatable[i] = [];
});
$.each(lines, function(j, val) {
datatable[j] = lines[j].split(',');
});
$('#myTestDiv').text(datatable[2][1]);
},
error: function(){
alert('error!');
}
})
});
答案 2 :(得分:0)
你可以让datatable
成为一个全局变量,因此它可以在任何地方使用,但这通常不是真正做到正确的实现,因为你的代码的其余部分并不知道当数据在该变量中时。 ajax函数是异步的,因此在ajax函数运行后,您不能假设数据在datatable
中。实际上,直到成功处理程序被调用一段时间后,它才真正可用。
相反,典型的实现是从成功函数调用函数并将datatable变量作为参数传递给它。这解决了(异步ajax调用的)时间问题和数据问题的可用性(作为函数的参数传递)。这看起来像这样:
success: function(data) {
var datatable = [];
// Populate datatable[]. This is a 2-d array.
// call function to process the data
processData(datatable);
},
答案 3 :(得分:0)
我不认为你可以在JSTL中访问 datatable 变量。 JSTL的角色或操作将位于服务器端,而数据表是客户端javascript变量。
您可以尝试的是,将此 datatable 值分配给隐藏的bean属性$('elementId').val(datatable)
,然后在服务器端访问服务器进一步请求