获取.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?
的最佳方法是什么答案 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。