我正在尝试克隆一个想要访问函数外部对象的函数内的json对象。但是当函数完成时,对象似乎仍未定义。好像它不是同一个变量?
var jsonUserObj;
$.getJSON("user.json", function(content){
jsonUserObj = $.parseJSON(JSON.stringify(content));
console.log(content);
console.log(jsonUserObj); //looks fine!
});
console.log(jsonUserObj); //undefined
在回调函数中它包含所有数据,但它不会保留在它之外。如何在全球范围内进行评估?
答案 0 :(得分:2)
$。getJSON是异步的,因此代码末尾的console.log在$ .getJSON返回其结果之前运行。
你应该修改回调中的变量(它看起来很好),然后在该函数中使用变量,这个回调是你可以保证设置变量的唯一地方。
您也可以使用$ .ajax的同步版本,但实际上并不推荐(并且可能不需要)。
答案 1 :(得分:1)
你有一个错字:
console.log(jsonUserObject);
应该是
console.log(jsonUserObj);
答案 2 :(得分:0)
您需要在函数外声明var jsonUserObj
。
看起来你有一个typeo,是jsonUserObj还是jsonUserObject?
答案 3 :(得分:0)
这可能是时间问题吗?如果该getJSON方法异步触发,那么在您触发最后一行时它可能没有返回它的值。这有意义吗?
答案 4 :(得分:0)
$.getJSON
执行ajax调用,这是异步的。之后的代码将在等待响应时继续进行评估。当响应返回时,程序流将跳回到ajax调用的成功/错误/完成处理程序。
tldr:你对ajax调用中的数据所做的任何操作都必须在该ajax调用的成功处理程序中。