我正在尝试解析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
。
答案 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);
});