Consuming OData with plain JavaScript is a bit painful, as we would require handling some of the low-level conversions. datajs is a JavaScript library that simplifies this task.
datajs converts data of any format that it receives from the server to an easily readable format. The batch request sent is a POST request to the path /odata/$batch, which is made available if batch update option is enabled in the OData route configuration.
As seen in the last post, a batch update request bundles of a number of create put and patch requests. These operations have to be specified in an object literal. Following snippet demonstrates it with a create, an update and a patch request:
Following snippet posts the above data to the /odata/$batch endpoint and then extracts the status of response of each request:
Happy coding!
datajs converts data of any format that it receives from the server to an easily readable format. The batch request sent is a POST request to the path /odata/$batch, which is made available if batch update option is enabled in the OData route configuration.
As seen in the last post, a batch update request bundles of a number of create put and patch requests. These operations have to be specified in an object literal. Following snippet demonstrates it with a create, an update and a patch request:
var requestData = { __batchRequests: [{ __changeRequests: [ { requestUri: "/odata/Customers(1)", method: "PATCH", data: { Name: "S Ravi Kiran" } }, { requestUri: "/odata/Customers(2)" data: { Name: "Alex Moore", Department: "Marketing", City:"Atlanta" } }, { requestUri: "/odata/Customers", method: "POST", data: { Name: "Henry", Department: "IT", City: "Las Vegas" } } ] }] };
Following snippet posts the above data to the /odata/$batch endpoint and then extracts the status of response of each request:
OData.request({ requestUri: "/odata/$batch", method: "POST", data: requestData, headers: { "Accept": "application/atom+xml"} }, function (data) { for (var i = 0; i < data.__batchResponses.length; i++) { var batchResponse = data.__batchResponses[i]; for (var j = 0; j < batchResponse.__changeResponses.length; j++) { var changeResponse = batchResponse.__changeResponses[j]; } } alert(window.JSON.stringify(data)); }, function (error) { alert(error.message); }, OData.batchHandler);
Happy coding!