12

サービスから取得した JSON データを JSTree に入力しようとしています (これは ajax を使用して呼び出されます)。ただし、jquery.jstree.js ファイルで「データも ajax 設定も指定されていないというエラー」が発生します。このため、JSTree は読み込み中の gif を表示するだけです。

AJAX コード(json をローカル変数 test に設定してから test を返すように編集)

function getJSONData() {
    var test;
    $
            .ajax({
                async : true,
                type : "GET",
                url : "/JavaTestService/rs/TestService/MyFirstTestService?languageCode=en_US&version=2",
                dataType : "json",

                success : function(json) {
                    test = json;
                },

                error : function(xhr, ajaxOptions, thrownError) {
                    alert(xhr.status);
                    alert(thrownError);
                    test = "error";
                }
            });
    return test;
}

JSTree コード

var jsonData = getJSONData();
createJSTrees(jsonData);

function createJSTrees(jsonData) {
        $("#supplierResults").jstree({
            "json_data" : {
                "data" : jsonData
            },
            "plugins" : [ "themes", "json_data", "ui" ]
        });

いくつかのデバッグの後、createJSTrees メソッドに渡されたときに jsonData が未定義であることがわかりました。そのデータを Ajax コードで正しく取得していますか? 前もって感謝します

4

2 に答える 2

7

getJSONData() は値を返さないため、jsonData は未定義です。$.ajax 呼び出しの完了後に返される getJSONData() に変数 local を割り当てない限り、$.ajax 成功ハンドラーからの戻り値に依存することはできません。しかし、非同期であるという利点もある次のようなものが必要です。

<script type="text/javascript">    

$(function() {
    $.ajax({
        async : true,
        type : "GET",
        url : "/JavaTestService/rs/TestService/MyFirstTestService?languageCode=en_US&version=2",
        dataType : "json",    

        success : function(json) {
            createJSTrees(json);
        },    

        error : function(xhr, ajaxOptions, thrownError) {
            alert(xhr.status);
            alert(thrownError);
        }
    });
});    

function createJSTrees(jsonData) {
    $("#supplierResults").jstree({
        "json_data" : {
            "data" : jsonData
        },
        "plugins" : [ "themes", "json_data", "ui" ]
    });
}    

</script>
于 2013-06-04T16:54:41.780 に答える