可能重复:
jQuery: Return data after ajax call success奇怪的行为与JavaScript全局变量和jQuery
首先我不是很有经验的JS或jQuery的,但据我的编程技巧去我似乎无法找到我的方法有任何问题。
var subtree;
$.post("addTreeServlet",
{
term:clickedNode,
max:maxId,
id:clickedId
},
function(jsonResponse){
subtree = eval('(' + jsonResponse + ')');
}
);
$jit.json.prune(subtree, level);
return {
'id': nodeId,
'children': subtree.children
};
我通过与调试器的代码去了,这里是发生了什么:该程序从addTreeServlet回来,将表示JSON数据的字符串。 eval()函数接受这个String并将其转换成一个JSON对象(再次,它在调试器中看起来非常好)。但只要我离开函数(jsonResponse),var子树显示为undefined,我无法弄清楚原因。
是因为jQuery方法吗?我不知道...
这也是同样的行为,如果我只是把子树=“无论”。一旦我退出函数,它就变得不确定了。
这并不奇怪,这是尝试使用异步代码获取同步结果的结果。你不能访问'$ .post'回调函数之外的'subtree'。该功能背后的逻辑将需要以不需要返回数据的方式重新完成。 –
不要使用'eval' jQuery会安全地为你解析JSON。 – zzzzBov
因为你的'function(jsonRepsonse)'之后的代码在你设置'subtree'的函数之前执行**。这是异步代码的回调。它不一定是在javascript中自上而下的。 – Chad