2012-11-23 52 views
-1

我试图解析一个JSON响应,但$ .getJSON中的任何指令都无法执行。

的json.html

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="js/jquery.js"></script> 
    </head> 
    <body> 
     <script> 
      $.getJSON("json.php?jsoncallback=?", function(data) { 
       var a = data[0].cve_id + 'something'; 
      }); 
      alert(a); //chrome says "a is not defined" 
     </script> 
    </body> 
</html> 

的json.php:

<?php 
header("Content-Type: application/json", true); 
echo file_get_contents("http://www.cvedetails.com/json-feed.php?numrows=10&vendor_id=0&product_id=0&version_id=0&hasexp=1&opec=1&opov=1&opcsrf=1&opfileinc=1&opgpriv=1&opsqli=1&opxss=1&opdirt=1&opmemc=1&ophttprs=1&opbyp=1&opginf=1&opdos=1&orderby=1&cvssscoremin=0"); 
?> 

任何想法,为什么?

LATER:

感谢您的回复。我明白了原因。

我已将$.getJSON更改为$.get,并指定了data typejson

+1

你的AJAX是异步的。变量有范围。 –

+1

当'alert(a)'发生时,异步AJAX调用还没有完成。你需要在'function(data)'回调中提醒(a)'。如果您需要使用该值来修改DOM,则必须在回调中执行此操作 –

+2

_chrome表示“a未定义”_ - 这是因为'a'在回调函数中定义为_local_变量,您将其传递给' $ .getJSON()',因此只能在该函数内部访问(即使除了异步问题)。 – nnnnnn

回答

1

风险价值是在回调闭包(匿名函数)内部定义的。使用闭包的主要原因之一是它们产生私人范围。即函数内部定义的任何变量都不可用于函数之外的代码。

这将工作:

$.getJSON("json.php?jsoncallback=?", function(data) { 
    var a = data[0].cve_id + 'something'; 
    alert(a); 
}); 
2

JSON调用是异步的,所以回调函数不会被调用,直到你严格的返回数据,但JavaScript代码会继续运行到下一行代码。导致STIL是不确定的尝试将其更改为财产以后的线沿线:

$.getJSON("json.php?jsoncallback=?", function(data) { 
    var a = data[0].cve_id + 'something'; 
    alert(a) 
}); 

您可以定义其他方法回调之外,并调用他们,当事件发生蒙山的propper数据