将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 变量中[重复]

转换 d3 图表以从变量内的 json 加载数据

如何将 ASP.NET 视图模型中的 JSON 保存到 JavaScript 变量中?

将视图渲染到 ExpressJS 中的变量中(用于 AJAX 响应)

从文件加载 JSON 与作为时间线事件的变量

刷新 JSP 变量而不重新加载页面