将json加载到变量中
Posted
技术标签:
【中文标题】将json加载到变量中【英文标题】:load json into variable 【发布时间】:2011-01-11 18:18:23 【问题描述】:我必须做一些非常简单的事情,但据我所知,似乎没有一种简单的方法可以做到这一点。我只想从远程源加载 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 保持为空。看来您必须使用回调函数来返回响应文本,因为它会在成功时触发。
不可能这么难!对吧?
【问题讨论】:
【参考方案1】:这样就可以了:
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。 请注意,同步请求可能 暂时锁定浏览器, 禁用任何操作,而 请求处于活动状态。
【讨论】:
为了我的利益澄清一下:$.getJSON 绝不是同步样式请求的好选择,即使我在成功回调期间将数据返回到我的变量? +1 获取相关信息,但为什么在函数开始时将 json 变量设为 null。 @Manoj 有两个原因 [1] 这个块可能在一个方法中,并且被多次调用。因此,这将刷新 json 变量。但是,如果 ajax 请求无论如何都会更新它,那有什么意义呢?那是因为... [2] 这是一个编码约定,以防 ajax 请求失败,然后用户可以测试 json 是否为空。如果是,那么可以假设ajax请求失败 这是不推荐的用法。async: false
不再被允许。
这似乎是一个很好的解决方案,但由于某种原因,我的 json 输出不正确。我有一个格式为“[id: 7, name: "Super Mario",id: 11, name: "Battletoads"...] 的文件,但似乎 XML 请求没有返回任何内容。 (不是 404 ......什么都没有)。【参考方案2】:
代码位应为:
var my_json;
$.getJSON(my_url, function(json)
my_json = json;
);
【讨论】:
如何避免上面提到的异步问题? 很可能试图强制同步 ajax 调用是一个坏主意,ajax 是用于异步调用的。这个答案应该是所描述问题的理想解决方案,我 +1。 它根本无法防止异步问题。 我在 Chrome 上绑定时遇到 CORS 错误。为什么加载本地文件会调用 CORS? @jDub9 因为您是从file:///
加载而不是从 http(s)://
加载【参考方案3】:
<input class="pull-right" id="currSpecID" name="currSpecID" value="">
$.get("http://localhost:8080/HIS_API/rest/MriSpecimen/getMaxSpecimenID", function(data, status)
alert("Data: " + data + "\nStatus: " + status);
$("#currSpecID").val(data);
);
【讨论】:
【参考方案4】: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>
【讨论】:
欢迎来到堆栈溢出 :-) 纯代码答案对社区没有用处。请解释为什么您的代码可以解决问题。见How to Answer【参考方案5】: 这会将 JSON 文件从外部获取到您的 javascript 变量。 现在这个 sample_data 将包含 JSON 文件的值。var sample_data = '';
$.getJSON("sample.json", function (data)
sample_data = data;
$.each(data, function (key, value)
console.log(sample_data);
);
);
【讨论】:
以上是关于将json加载到变量中的主要内容,如果未能解决你的问题,请参考以下文章
试图将 txt 文件中的 json 数据加载到 python 变量中[重复]
如何将 ASP.NET 视图模型中的 JSON 保存到 JavaScript 变量中?