2

可能重复:
jQuery:ajax调用成功后返回数据

首先,我对 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() 函数接受这个字符串并将其转换为 JSON 对象(同样,它在调试器中看起来非常好)。但是一旦我离开函数(jsonResponse),var 子树就会显示为未定义,我不知道为什么。

那是因为jQuery方法吗?我不知道...

如果我只输入 subtree =“whatever”,这也是相同的行为。一旦我退出函数,它就会变得未定义..

4

2 回答 2

1

它正在等待发布响应,但您的闲置脚本会立即被浏览器解析。所以你需要在收到回复后对 ajax 响应做你想做的事情。

function(jsonResponse){
    var subtree = eval('(' + jsonResponse + ')');
    doSomthingWithResponse(subtree);
}
于 2013-02-01T15:54:44.720 回答
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
        };
于 2013-02-01T16:00:43.080 回答