我在完成中得到了正确的东西但是对具有更宽范围的变量的赋值不起作用。它适用于例如 $。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 ,对吧?但这对我来说是一种糟糕的编程风格。评论
答案 0 :(得分:1)
是的,你是对的,你正在分配.done
中的全局变量,没有什么不妥,问题是你在ajax调用完成之前尝试使用那个全局变量(即在.done
执行之前。)
这是因为异步行为或ajax。
使其工作的一种错误的方法是使您的ajax调用与async:false
同步