jQuery $ .getJSON()不起作用

时间:2012-11-23 01:15:28

标签: javascript jquery json getjson

我正在尝试解析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");
?>

知道为什么吗?

后来:

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

我已从$.getJSON切换到$.get,并将data type指定为json

2 个答案:

答案 0 :(得分:2)

JSON调用是异步的,因此回调函数不会被调用,直到您的服务器返回数据,但javascript代码仍然运行到下一行代码。导致stil未定义尝试将其更改为以下行:

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

你可以定义回调之外的其他方法,并在事件发生时使用propper数据调用em

答案 1 :(得分:1)

var a 在回调闭包(匿名函数)中定义。使用闭包的一个主要原因是它们产生了私有范围。即函数内部定义的任何变量都不能用于函数外部的代码。

这将有效:

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