2012-10-05 135 views
0
<html> 
<head> 
    <title>Group Test</title> 
    <script type="text/javascript" src="/static/javascript/jquery-1.8.2.min.js"></script> 

</head> 
<body> 

    <script type="text/javascript"> 

    var global = new Array(); 
    $.ajax({ 
     url: "/json", 
     success: function(reports){ 
      global = reports; 
      process(reports); 
      return global; 
      } 
     }); 


function process(reports){ 
    for (i=0; i<reports.length; i++) { 
     document.write(i + " : "+reports[i].fields.report_name+"<br>"); 
     } 
    } 

    </script> 

</body> 
</html> 

好的,所以有我的代码。我试图在整个代码中使用JSON数据,但出于某种原因,每当我尝试使用$ .ajax()函数外的报告对象时,都会收到“报告未定义”错误。无法访问javascript全局变量

根据JSLint,代码看起来不错,AND 列出报告和变量全局作为全局变量。

如果我尝试运行任何使用外部任何一个的东西,它将无法工作。

'success'(reports) 
global 
global 
line 22 
process(reports) 
global 
document 
+0

哦,是的,拧现有的全球性质。让我们用我们自己的变量来污染全局名称空间。我们不需要一些愚蠢的IIFE包装。 ':P' –

回答

1

您不能访问reports因为只有global可以从每一个地方访问全局对象。 reports是一个局部变量来的成功以及对process功能

<script type="text/javascript"> 

    var global = new Array(); 
    $.ajax({ 
     url: "/json", 
     success: function(reports){ 
      global = reports; 
      process(reports); 
      return global; 
      } 
     }); 


function process(reports){ 
    for (i=0; i<reports.length; i++) { 
     document.write(i + " : "+reports[i].fields.report_name+"<br>"); 
     } 
    } 
     // reports is undefined here. but global can be accessed (will be empty array before success function get called) 
    </script> 
+0

非常感谢,使用“全球”作品... –

+0

不客气。 – Anoop

0

记住$.ajax是异步,所以除非你调用成功回调里面的功能,价值可能尚未设置。您也可以使用global而不是reports

+0

我也很好奇,如果我选择返回“报告”,它会变得可用吗? –