In a nutshell, I can not get the Kendo datasource to work with a dropdown list.
I can use $.ajax to call my web service and populate the dropdown list in the success callback. The same transport mechanism does not work with the datasource.
Here's the complete code for the page:
<!DOCTYPE html>
<
html
>
<
head
>
<
title
>Kendo Test</
title
>
<
link
rel
=
"stylesheet"
type
=
"text/css"
href
=
"../CSS/Kendo/kendo.common.min.css"
/>
<
link
rel
=
"stylesheet"
type
=
"text/css"
href
=
"../CSS/Kendo/kendo.default.min.css"
/>
<
script
type
=
"text/javascript"
src
=
"../js/jQuery/jquery-1.7.js"
></
script
>
<
script
type
=
"text/javascript"
src
=
"../js/Kendo/kendo.web.min.js"
></
script
>
</
head
>
<
body
>
<
div
>
<
input
id
=
"dropdownlist"
/> <
input
id
=
"lstfromajax"
/>
</
div
>
<
div
id
=
"ajaxresult"
></
div
>
</
body
>
<
script
type
=
"text/javascript"
>
$(function()
{ // Make an AJAX call and bind on success - This works!
$.ajax(
{ url: "../WebServices/Resources.asmx/JSONLookupGetSurgeons2",
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: "{}",
success: function(msg)
{ // Display returned JSON in result div
$('#ajaxresult').html(JSON.stringify(msg.d));
// Try to use directly in drop down list. This Works!
$('#lstfromajax').kendoDropDownList(
{ dataTextField: "Name",
dataValueField: "Id",
dataSource:
{ data: msg.d,
schema:
{ model: kendo.data.Model.define(
{ id: "Id"
})
},
},
});
},
error: function(e)
{ console.log('Ajax error: ' + JSON.stringify(e));
}
});
// Now, try to use the web service as a direct data source - This doesn't work!
$('#dropdownlist').kendoDropDownList(
{ dataTextField: "Name",
dataValueField: "Id",
dataSource:
{ transport:
{ read:
{ url: "../WebServices/Resources.asmx/JSONLookupGetSurgeons2",
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: "{}"
},
schema:
{ data: "d",
model: kendo.data.Model.define(
{ id: "Id"
})
},
error: function(e)
{ console.log('Datasource error: ' + JSON.stringify(e));
}
}
}
});
});
</
script
>
</
html
>
I've included a screen snapshot to show the list on the left not working and the list on the right that does work.
I coded a console.log message in the parseJSON method. As expected, this routine is called twice - once for $.ajax and once for the Kendo datasource. They both display the same result - since they are hitting the same web service.
If I click the first dropdown list box (the one that's not populated), the browser ultimately complains of a long-running script and/or aborts!
Please tell me I'm missing something easy. I need to use the CRUD capabilities of the datasource but can't even get the simplest aspect going.