我必须做一些非常简单的事情,但就我所知,似乎没有一种简单的方法可以做到这一点。我只想从远程源加载JSON数据,并使用jQuery将其存储在全局Javascript变量中。这就是我所拥有的:
var my_json;
$.getJSON(my_url, function(json) {
var my_json = json;
});
my_json变量仍未定义。我认为这显然是一个范围问题。在我看来,$ .getJSON方法应该返回JSON,但它返回一个XMLHttpRequest对象。如果我这样做:
request = $.getJSON(my_url);
my_json = request.responseText.evalJSON();
这不起作用,因为在readystate == 4之前,responsetext保持为null。看来你必须使用回调函数来返回响应文本,因为它会在成功时触发。
不可能这么难!正确?
答案 0 :(得分:123)
这样做:
var json = (function () {
var json = null;
$.ajax({
'async': false,
'global': false,
'url': my_url,
'dataType': "json",
'success': function (data) {
json = data;
}
});
return json;
})();
主要问题是$.getJSON
将异步运行,因此您的Javascript将在其success
回调触发之前通过调用它的表达式进行,因此无法保证您的变量将捕获任何数据
请特别注意上述ajax调用中的'async': false
选项。 manual说:
默认情况下,发送所有请求 异步(即设置为true) 默认情况下)。如果你需要同步 请求,将此选项设置为false。 请注意,同步请求可能 暂时锁定浏览器, 禁用任何操作时 请求已激活。
答案 1 :(得分:28)
代码位应为:
var my_json;
$.getJSON(my_url, function(json) {
my_json = json;
});
答案 2 :(得分:0)
var itens = null;
$.getJSON("yourfile.json", function(data) {
itens = data;
itens.forEach(function(item) {
console.log(item);
});
});
console.log(itens);

<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
</head>
<body>
</body>
</html>
&#13;
答案 3 :(得分:0)
现在此sample_data将包含JSON文件的值。
var sample_data = '';
$.getJSON("sample.json", function (data) {
sample_data = data;
$.each(data, function (key, value) {
console.log(sample_data);