首先,我对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数据的String。 eval()函数接受此String并将其转换为JSON对象(同样,它在调试器中看起来非常好)。但是一旦我离开函数(jsonResponse),var子树显示为undefined,我无法弄清楚原因。
这是因为jQuery方法吗?我不知道......
如果我只是把subtree =“what”,那也是同样的行为。退出函数后它立即变为未定义。
答案 0 :(得分:1)
它正在等待帖子回复,但您的快速脚本会立即被浏览器解析。所以你需要在收到回复后的回复中做你想做的事情。
function(jsonResponse){
var subtree = eval('(' + jsonResponse + ')');
doSomthingWithResponse(subtree);
}
答案 1 :(得分:0)
问题是$ .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
};