javascript全局变量和jQuery的奇怪行为
可能重复:javascript全局变量和jQuery的奇怪行为,javascript,jquery,Javascript,Jquery,可能重复: 首先,我对JS或jQuery不是很有经验,但就我的编程技能而言,我似乎找不到我的方法有任何错误 var subtree; $.post("addTreeServlet", { term:clickedNode, max:maxId, id:clickedId }, function(jsonResponse){ subtree = eval('(' + jsonResponse + ')')
首先,我对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数据的字符串。函数的作用是:获取该字符串并将其转换为JSON对象(同样,它在调试器中看起来非常好)。但是,一旦我离开函数(jsonResponse),var子树就会显示为未定义,我不知道为什么
这是因为jQuery方法吗?我不知道
如果我只是把subtree=“whatever”放进去,这也是同样的行为。一旦我退出函数,它就会变得未定义。它正在等待post响应,但您的空闲脚本会立即被浏览器解析。所以,在收到post响应之后,您需要对ajax响应执行您想要执行的操作
function(jsonResponse){
var subtree = eval('(' + jsonResponse + ')');
doSomthingWithResponse(subtree);
}
问题是$.post异步为您执行此任务,而$.post下的代码在返回调用之前执行。。。您可以将$.ajax与同步调用一起使用
var subtree;
$.ajax({
type: 'POST',
url: "addTreeServlet",
data: {
term: clickedNode,
max: maxId,
id: clickedId
},
success: function (jsonResponse) {
subtree = eval('(' + jsonResponse + ')');
},
async: false
});
$jit.json.prune(subtree, level);
return {
'id': nodeId,
'children': subtree.children
};
这并不奇怪,这是尝试使用异步代码获得同步结果的结果。您不能在
$.post
回调函数之外访问子树。此函数背后的逻辑需要以不需要返回数据的方式重新执行。不要使用eval
jQuery将为您安全地解析JSON。因为函数(jsonRepsonse)
在设置子树
的函数之前执行“after”代码。这是来自异步代码的回调。在javascript中它不一定是自顶向下的。。。这个函数的标准副本是什么?function(jsonResponse){
是一个回调函数,请参阅:是的,thx,我的问题现在得到了回答。我只是将回调设置为同步。这对我的情况有效,因为发送/接收和显示数据之间的动画相对较长。