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オブジェクトに変換します(ここでも、デバッガーでは完全に正常に見えます)。しかし、function(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 に答える