2012-05-01 22 views
1

我是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> 

现在,我要打印的2-d阵列 “数据表”,在HTML表,最好用JSTL。但看起来,“datatable”变量不能在外部访问。我知道该表正在填充正确,$('#myTestDiv').text(datatable[2][0]);正在打印预期的输出。

如何实现这一目标?

非常感谢。

回答

2

从变量声明前删除var。这将导致变量被放置在全局的window对象上,使得它可以从全局访问。尽管如此,请注意这种做法,因为污染你的全球背景令人不悦。

+0

感谢。我试着去掉'var',但输出没有改变。 – Bhushan

+0

向我们展示您如何访问该变量。在ajax请求的成功方法甚至被运行之前,你没有试图访问它,对吗?在那之前它不存在。 – Sampson

0

我建议你应该在.ajax()函数之外声明datatable变量,以便它在代码的其他部分可见。

如果您知道它正在填充正确,那么这只是一个范围界定问题。

UPDATE

 $(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!'); 
       } 
      }) 
     }); 
+0

感谢您的快速回复。通过'你应该在.ajax()函数外部声明数据变量变量,我应该在哪里声明变量?除了任何jQuery函数之外,还有标签,还是一切之外? – Bhushan

+0

如果你把它放在script标签之外,它会是JavaScript吗? – epascarello

+0

更新了我的解答。 – RET

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); 

      }, 
0

我不认为你可以在JSTL访问数据表变量。 JSTL的角色或行为将在服务器端,而数据表是客户端JavaScript变量。 什么你可以尝试,对于快速回复此数据表值赋给一个隐藏的bean属性与$('elementId').val(datatable),然后在进一步请求在服务器端访问服务器