0

我正在尝试在函数内部克隆一个 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

在回调函数内部,它包含所有数据,但不会保留在其外部。如何使其在全球范围内可评估?

4

5 回答 5

2

$.getJSON 是异步的,因此代码末尾的 console.log 在 $.getJSON 返回其结果之前运行。

您应该修改回调中的变量(看起来不错),然后在该函数中使用该变量,此回调是您可以保证设置变量的唯一地方。

您也可以使用 $.ajax 的同步版本,但这确实不推荐(而且可能没有必要)。

于 2012-10-23T13:28:22.727 回答
1

你有一个错字:

console.log(jsonUserObject);

它应该是

console.log(jsonUserObj);
于 2012-10-23T13:28:08.820 回答
0

您需要var jsonUserObj在函数外部声明。

看起来你有一个 typeo,是 jsonUserObj 还是 jsonUserObject?

于 2012-10-23T13:27:47.467 回答
0

会不会是时间问题?如果该 getJSON 方法是异步触发的,那么在您触发最后一行时它可能还没有返回它的值。那有意义吗?

于 2012-10-23T13:28:48.493 回答
0

$.getJSON执行一个异步的ajax调用。它之后的代码将在等待响应时继续评估。当响应返回时,程序流将跳回 ajax 调用的成功/错误/完成处理程序。

tldr:您对来自 ajax 调用的数据所做的任何事情都必须在该 ajax 调用的成功处理程序中。

于 2012-10-23T13:33:52.650 回答