1

我是 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 表中打印二维数组“datatable”,最好使用 JSTL。但似乎无法在外部访问“数据表”变量。我知道表格已正确填充,$('#myTestDiv').text(datatable[2][0]);正在打印预期输出。

如何做到这一点?

非常感谢。

4

4 回答 4

2

var从变量声明的前面删除。这将导致变量被放置在全局window对象上,使其可以从各处访问。但是要小心这种做法,因为污染你的全球环境是不受欢迎的。

于 2012-05-01T03:59:05.773 回答
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!');
                }
            })
        });
于 2012-05-01T03:59:28.377 回答
0

您可以将datatable其设为全局变量,以便在任何地方都可用,但这通常不是真正实现正确实现的原因,因为您的其余代码不知道数据何时在该变量中。ajax 函数是异步的,所以你不能仅仅假设数据在datatable你的 ajax 函数运行之后就存在。事实上,直到稍后调用成功处理程序时,它才会真正可用。

相反,一个典型的实现是从你的成功函数中调用一个函数,并将数据表变量作为参数传递给它。这解决了(异步 ajax 调用的)时间问题和数据可用性问题(作为参数传递给函数)。看起来像这样:

            success: function(data) {
                var datatable = [];
                // Populate datatable[]. This is a 2-d array.
                // call function to process the data
                processData(datatable);

            },
于 2012-05-01T04:12:01.747 回答
0

我不认为您可以访问 JSTL 中的数据表变量。JSTL 的角色或动作将在服务器端,而数据是客户端 javascript 变量。您可以尝试的是,将此数据值分配给隐藏的 bean 属性,$('elementId').val(datatable)然后在对服务器的进一步请求中在服务器端访问它

于 2012-05-01T04:12:26.770 回答