从.json获取内容并写入变量

时间:2016-01-02 14:33:12

标签: javascript jquery json ajax

获取.json的内容并将其存储到var的最佳方法是什么? 我见过一些线程,但我无法管理我的代码...

function retrieve_json() {
  var content;
  $.when(
    $.getJSON("http://localhost/browsergame/data/test.json", function(data) {
      content = data;
    })
  ).then(function () {
    console.log(content);
    return content;
  });
}

var json_content = retrieve_json();
console.log (json_content);

函数中的console.log显示了json的正确内容,我的代码末尾的console.log显示为“undefined”。我想异步是这里的主要问题。我试过用$ .ajax做这件事,但也无法管理。 那么,获取.json文件的内容并将其存储到var?

的最佳方法是什么

2 个答案:

答案 0 :(得分:1)

问题是retrieve_json不会停止并等到json从服务器到达。继续执行以$ .when开头的语句之后的任何内容。在这种情况下,它是函数的结束。由于此处没有return语句,函数将返回值'undefined',即存储在json_content中的内容。

如果要在答案返回之前停止执行,则必须将后续步骤包装到函数中,例如在示例的“then”方法中调用它,或者将其传递给getJSON,然后将其存储在内容变量现在。

请务必阅读承诺如何运作。

答案 1 :(得分:0)

一旦代码异步,就无法实现同步。您只能在传递给promises或回调函数的函数中可靠地使用JSON的内容,否则您无法保证在执行代码时已获取JSON。

如果你发现甚至promises语法很糟糕你可能对async / await感兴趣,那么ES7的建议语法现在可以转换为ES5 with Babel

这是一篇很好的文章,演示了JavaScript中异步编程的不同方法:The long road to Async/Await in JavaScript