JavaScript/jQuery Chart - Custom Sources

Access to a custom data source is configured using the CustomStore component. DevExtreme provides ASP.NET and PHP extensions that help configure it and implement server-side data processing. You can also use the third-party extension for MongoDB.

You need to configure the CustomStore in detail for accessing a server built on another technology. Data in this situation can be processed on the client or server. In the former case, switch the CustomStore to the raw mode and load all data from the server in the load function as shown in the next example.

JavaScript
  • $(function() {
  • $("#chartContainer").dxChart({
  • dataSource: new DevExpress.data.DataSource({
  • store: new DevExpress.data.CustomStore({
  • loadMode: "raw",
  • load: function () {
  • return $.getJSON('https://mydomain.com/MyDataService');
  • }
  • }),
  • paginate: false
  • })
  • });
  • });

View Demo

In the latter case, use the CustomStore's load function to send data processing settings to the server. These settings are passed as a parameter to the load function and depend on the operations (filtering, sorting, etc.) that you have enabled in the DataSource. The following settings are relevant for the Chart:

After receiving these settings, the server should apply them to data and send back an object with the following structure:

  • {
  • data: [ ... ] // result data objects
  • }

This example shows how to make a query for data.

JavaScript
  • $(function() {
  • $("#chartContainer").dxChart({
  • dataSource: new DevExpress.data.DataSource({
  • store: new DevExpress.data.CustomStore({
  • load: function(loadOptions) {
  • var d = $.Deferred(),
  • params = {};
  • [
  • "sort",
  • "filter",
  • "searchExpr",
  • "searchOperation",
  • "searchValue"
  • ].forEach(function(i) {
  • if(i in loadOptions && isNotEmpty(loadOptions[i]))
  • params[i] = JSON.stringify(loadOptions[i]);
  • });
  • $.getJSON("http://mydomain.com/MyDataService", params)
  • .done(function(result) {
  • // Here, you can perform operations unsupported by the server
  • // or any other operations on the retrieved data
  • d.resolve(result.data);
  • });
  • return d.promise();
  • }
  • }),
  • paginate: false
  • })
  • });
  • });
  • function isNotEmpty(value) {
  • return value !== undefined && value !== null && value !== "";
  • }
See Also