将json加载到变量中

时间:2010-02-01 15:02:48

标签: jquery json getjson

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

不可能这么难!正确?

4 个答案:

答案 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;
&#13;
&#13;

答案 3 :(得分:0)

  • 这将在您的javascript变量外部获取JSON文件。
  • 现在此sample_data将包含JSON文件的值。

    var sample_data = ''; $.getJSON("sample.json", function (data) { sample_data = data; $.each(data, function (key, value) { console.log(sample_data);