如何在脚本外部访问jQuery变量?

时间:2012-05-01 03:55:27

标签: jquery

我是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]);正在打印预期输出。

如何实现这一目标?

非常感谢。

4 个答案:

答案 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),然后在服务器端访问服务器进一步请求