Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 保留在$.ajax调用中获得的信息';s done(…)方法_Javascript_Jquery_Ajax_Coding Style_Scope - Fatal编程技术网

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,因此他不能(也不希望出于不好的考虑)将其设置为异步。现在我想了想,我意识到我想要的是一个异步调用,它保证在其他东西之前执行。我知道,我知道-我在讽刺我自己的大脑切奶酪。