Javascript 保留在$.ajax调用中获得的信息';s done(…)方法
我正在完成正确的工作,但是分配给范围更广的变量不起作用。每个(…)都可以用美元,所以我错误地认为它在这里也可以用Javascript 保留在$.ajax调用中获得的信息';s done(…)方法,javascript,jquery,ajax,coding-style,scope,Javascript,Jquery,Ajax,Coding Style,Scope,我正在完成正确的工作,但是分配给范围更广的变量不起作用。每个(…)都可以用美元,所以我错误地认为它在这里也可以用 var outee = null; $.ajax({ url: "http://...", dataType: 'jsonp', ... }).done(function (stuff) { // works well displayThe(stuff); // works well (but targets probably a global outee)
var outee = null;
$.ajax({
url: "http://...",
dataType: 'jsonp',
...
}).done(function (stuff) {
// works well
displayThe(stuff);
// works well (but targets probably a global outee)
outee = stuff;
displayThe(outee);
});
// fail due to outee being nada, nicht, zilch etc.
displayThe(outee);
我如何在获得匿名函数的done方法中的匿名函数范围之外存储这些内容以供使用
我是否正确地假设内部的分配是指一个全局路由?解决我的问题的一种方法是不通过var ed outee方法的声明隐藏全局outee,对吗?但对我来说,这是一种糟糕的编程风格。注释?是的,您是对的,您在
.done
中分配了一个全局变量,这没有错,问题是您试图在ajax调用完成之前(即执行.done
之前)使用该全局变量
这是因为异步行为或ajax。
一个不好的方法是使ajax调用与
async:false
同步,这不是范围问题。像您那样指定值是可以的。问题是显示(outee)代码>(在最后一行)在收到Ajax响应之前调用,即在设置数据之前。Ajax是异步的。也许这对你有帮助。只要您能够确保对全局变量的访问总是在设置值之后发生,您就可以了。正如您所说,async:false
是不好的,甚至更糟糕的是,它不适用于JSONP(OP似乎使用的)。OP正在使用JSONP,因此他不能(也不希望出于不好的考虑)将其设置为异步。现在我想了想,我意识到我想要的是一个异步调用,它保证在其他东西之前执行。我知道,我知道-我在讽刺我自己的大脑切奶酪。