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

知道为什么吗?

之后:

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

我已经从 to 切换$.getJSON$.get,指定data typeto json

4

2 回答 2

2

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

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

您可以在回调之外定义其他方法,并在事件发生时调用 em

于 2012-11-23T01:23:04.463 回答
1

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

这将起作用:

$.getJSON("json.php?jsoncallback=?", function(data) {
    var a = data[0].cve_id + 'something';
    alert(a);
});
于 2012-11-23T01:23:47.863 回答