2012-10-05 134 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

我也很好奇,如果我選擇返回「報告」,它會變得可用嗎? –