user2799754
user2799754

Reputation: 11

Kendo Datasource response is empty

I am new to Kendo UI. I am trying to read the remote data and display in the screen. I am able to see the remote json data by accessing the URL in the browser. But when I try to alert() the response data inside kendo UI, it is empty.

here is the sample code.

<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>

The JSON data is

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

as the response in the browser. The alert(kendo.stringify(shareDataSource.data())); is empty and the alert(response.length); is also undefined.

Can someone help on this?

Upvotes: 1

Views: 3302

Answers (1)

OnaBai
OnaBai

Reputation: 40887

The problem is that shareDataSource.read(); is asynchronous which means that you invoke read but data is not immediately available. You can use fetch instead that executes a portion of code when the data is available. Your code would be:

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

There is also a problem in requestEnd function: you try to get the length of response but in the model definition you say that data field is called data so your server should be returning something like:

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

and then for accessing the length you should do response.data.length

Upvotes: 1

Related Questions