1

剣道UIは初めてです。リモートデータを読み取って画面に表示しようとしています。ブラウザで URL にアクセスして、リモートの json データを表示できます。しかし、剣道 UI 内の応答データを alert() しようとすると、空です。

ここにサンプルコードがあります。

<script type="text/javascript">
    var shareDataSource;
    var viewModel;
    function searchByVin() {
        var vin = $("#vinNumber").val();
        shareDataSource = new kendo.data.DataSource({
            transport: {
                read: {
                    url: "http://localhost:9080/portal/programexcep/resources/request/vin/"+vin,
                    dataType: "json"
                }
            },
            schema: {
                data: "data",
                model: { id: "Id" }
            },
            requestEnd: function(e) {
                var response = e.response;
                var type = e.type;
                alert(type);
                alert(response.length);
            }
        });
        shareDataSource.read();
        alert(vin);
        alert(kendo.stringify(shareDataSource.data()));
    }
</script>

JSONデータは

{"Id":10,"FirstName":"John Smith","vin":"html5"} 

ブラウザの応答として。はalert(kendo.stringify(shareDataSource.data()));空で、 alert(response.length);も定義されていません。

誰かがこれについて助けることができますか?

4

1 に答える 1

1

問題は、それshareDataSource.read();が非同期であることです。つまり、read を呼び出しても、データはすぐには利用できません。fetch代わりに、データが利用可能な場合にコードの一部を実行する を使用できます。あなたのコードは次のようになります。

shareDataSource.fetch(function() {
    alert(vin);     
    alert(kendo.stringify(shareDataSource.data()));
});

関数にも問題があります。 ofrequestEndを取得しようとしますが、定義ではフィールドが呼び出されているため、サーバーは次のようなものを返す必要があります。lengthresponsemodeldatadata

{ 
    "data" : [ 
        { "Id" : 1 },
        { "Id" : 2 }, 
        { "Id" : 3 }
    ]
}

そして、あなたがしなければならない長さにアクセスするためにresponse.data.length

于 2013-09-20T23:07:17.123 に答える