保持在$ .ajax调用的done(...)方法中获取的信息

时间:2013-06-22 09:39:58

标签: javascript jquery ajax coding-style scope

我在完成中得到了正确的东西但是对具有更宽范围的变量的赋值不起作用。它适用于例如 $。each(...)所以我错误地认为它也适用于此。

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);

如何在完成方法中使用 范围内的存储

我是否正确假设 中的作业是指全局 outee ?解决我的问题的一种方法是不要通过 var -ed outse 的方法声明隐藏全局 outee ,对吧?但这对我来说是一种糟糕的编程风格。评论

1 个答案:

答案 0 :(得分:1)

是的,你是对的,你正在分配.done中的全局变量,没有什么不妥,问题是你在ajax调用完成之前尝试使用那个全局变量(即在.done执行之前。)

这是因为异步行为或ajax。 使其工作的一种错误的方法是使您的ajax调用与async:false同步