1

我是剑道 UI 的新手。我正在尝试读取远程数据并显示在屏幕上。我可以通过访问浏览器中的 URL 来查看远程 json 数据。但是当我尝试 alert() kendo UI 中的响应数据时,它是空的。

这是示例代码。

<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()));
});

函数中还有一个问题requestEnd:您尝试获取lengthofresponse但在model定义中您说该data字段被调用data,因此您的服务器应该返回如下内容:

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

然后访问你应该做的长度response.data.length

于 2013-09-20T23:07:17.123 回答