Hi,
I want to use DataSource to connect to a REST API. But when I use DataSource to post raw data the body is changed just before the HTTP request, which fails due to bad request format. When I do the same with JQuery there is no problem. Here is a code snippet that illustrate that:
I attach a screenshot of Firebug showing the results. "jqueryPost" post my raw data unchanged but "kendoPost" convert it before sending the HTTP request.
So I dig the kendo source code with firebug and I find where this happens. It's in "setup" method of the RemoteTransport class, at the following line:
At this point "data" contains the raw data which is a string and not an object. And when a string is given to "extend" it is seen as an object, i.e. an array of characters, which is then converted to an object. Example: the call "$.extend({}, 'str')" returns {0: 's', 1: 't', 2: 'r'}.
So to ensure my raw data is not convert before the POST, I have modified the "setup" method for RemoteTransport class in kendo.web.js:
This way DataSource POST works as I expect.
But am I missing something? Is there another way to do what I want? Or is this a missing feature?
Thanks!
I want to use DataSource to connect to a REST API. But when I use DataSource to post raw data the body is changed just before the HTTP request, which fails due to bad request format. When I do the same with JQuery there is no problem. Here is a code snippet that illustrate that:
var
postUrl =
'http://localhost:8080/catalog/devices'
;
var
postBody =
'{"model":"765-VVH-78"}'
;
var
dataSource =
new
kendo.data.DataSource({
transport: {
create: {
url: postUrl,
type:
'POST'
,
contentType:
"application/json"
,
data: postBody
}
}
});
var
kendoPost =
function
() {
dataSource.transport.create();
}
var
jqueryPost =
function
() {
$.ajax({
url: postUrl,
type:
'POST'
,
contentType:
"application/json"
,
data: postBody
});
}
I attach a screenshot of Firebug showing the results. "jqueryPost" post my raw data unchanged but "kendoPost" convert it before sending the HTTP request.
So I dig the kendo source code with firebug and I find where this happens. It's in "setup" method of the RemoteTransport class, at the following line:
parameters = extend(
true
, {}, data, options.data);
So to ensure my raw data is not convert before the POST, I have modified the "setup" method for RemoteTransport class in kendo.web.js:
if
(
typeof
data ==
"string"
) {
parameters = data;
}
else
{
parameters = extend(
true
, {}, data, options.data);
}
This way DataSource POST works as I expect.
But am I missing something? Is there another way to do what I want? Or is this a missing feature?
Thanks!