51

我必须做一些非常简单的事情,但据我所知,似乎没有一种简单的方法可以做到这一点。我只想从远程源加载 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 保持为空。看来您必须使用回调函数来返回响应文本,因为它会在成功时触发。

不可能这么难!对?

4

5 回答 5

127

这将做到:

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,因此无法保证您的变量将捕获任何数据。

请特别注意'async': false上述 ajax 调用中的选项。手册说:

默认情况下,所有请求都是异步发送的(即默认设置为 true)。如果您需要同步请求,请将此选项设置为 false。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作。

于 2010-02-01T15:08:01.093 回答
28

代码位应为:

var my_json;
$.getJSON(my_url, function(json) {
  my_json = json;
});
于 2010-02-01T15:07:48.940 回答
0
<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);
    });

在此处输入图像描述 在此处输入图像描述

于 2015-08-16T10:48:10.730 回答
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>

于 2017-07-13T01:43:28.407 回答
0
  • 这会将 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);
    });
});
于 2018-12-10T05:54:20.950 回答