使用javascript全局变量和jQuery的奇怪行为

时间:2013-02-01 15:29:31

标签: javascript jquery

  

可能重复:
  jQuery: Return data after ajax call success

首先,我对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”,那也是同样的行为。退出函数后它立即变为未定义。

2 个答案:

答案 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
        };