修改函数内的全局javascript变量

时间:2012-10-23 13:25:15

标签: javascript jquery

我正在尝试克隆一个想要访问函数外部对象的函数内的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

在回调函数中它包含所有数据,但它不会保留在它之外。如何在全球范围内进行评估?

5 个答案:

答案 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调用的成功处理程序中。