Skip to content

Commit 6d97370

Browse files
AJAX via devextreme/core/utils/ajax (#374)
1 parent ee2bc87 commit 6d97370

3 files changed

Lines changed: 46 additions & 28 deletions

File tree

build/make-nojquery.js

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,6 @@ const README = `# DevExtreme ASP.NET Data
88
jQuery-free version of [devextreme-aspnet-data](https://www.npmjs.com/package/devextreme-aspnet-data).
99
`;
1010

11-
const JQ_SURROGATE_MODULAR = `$1{
12-
$1 ajax: require("devextreme/core/utils/ajax").sendRequest,
13-
$1 Deferred: require("devextreme/core/utils/deferred").Deferred,
14-
$1 extend: require("devextreme/core/utils/extend").extend
15-
$1}`;
16-
17-
const JQ_SURROGATE_GLOBAL = `throw "This script should be used with an AMD or CommonJS loader"`;
18-
1911
const AJAX_SETTINGS_SURROGATE = `{
2012
cache?: boolean;
2113
contentType?: any;
@@ -44,8 +36,9 @@ fs.writeFileSync(path.join(outputPath, "package.json"), JSON.stringify(nojqueryP
4436
fs.writeFileSync(
4537
path.join(outputPath, "index.js"),
4638
fs.readFileSync(path.join(__dirname, "../js/dx.aspnet.data.js"), "utf-8")
47-
.replace(/( +)require\("jquery"\)/g, JQ_SURROGATE_MODULAR)
48-
.replace(/DevExpress\.data\.AspNet = [^]+?\)/, JQ_SURROGATE_GLOBAL)
39+
.replace(/\brequire\("jquery"\).Deferred/g, `require("devextreme/core/utils/deferred").Deferred`)
40+
.replace(/\brequire\("jquery"\).extend/g, `require("devextreme/core/utils/extend").extend`)
41+
.replace(/DevExpress\.data\.AspNet = [^]+?\)/, `throw "This script should be used with an AMD or CommonJS loader"`)
4942
.replace(/\/\* global .+?\*\//, "/* global define, module, require */")
5043
);
5144

js-test/test.js

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
require("xhr-mock").default,
1111
require("devextreme/core/version"),
1212
require("devextreme/data/data_source"),
13+
require("devextreme/core/utils/ajax"),
1314
require(ASPNET_DATA_SCRIPT)
1415
);
1516
});
@@ -18,23 +19,27 @@
1819
require("xhr-mock").default,
1920
require("devextreme/core/version"),
2021
require("devextreme/data/data_source"),
22+
require("devextreme/core/utils/ajax"),
2123
require(ASPNET_DATA_SCRIPT)
2224
);
2325
} else {
2426
factory(
2527
window.XHRMock,
2628
DevExpress.VERSION,
2729
DevExpress.data.DataSource,
30+
DevExpress.utils.ajax,
2831
DevExpress.data.AspNet
2932
);
3033
}
3134

32-
})(function(XHRMock, devextremeVersion, DataSource, AspNet) {
35+
})(function(XHRMock, devextremeVersion, DataSource, ajaxUtility, AspNet) {
3336
"use strict";
3437

3538
// https://github.com/karma-runner/karma-qunit/issues/57
3639
var QUnit = window.QUnit;
3740

41+
devextremeVersion = devextremeVersion.split(".").map(Number);
42+
3843
var createStore = AspNet.createStore,
3944
NEVER_RESOLVE = new Promise(function() { });
4045

@@ -54,11 +59,8 @@
5459
}
5560

5661
function useLegacyStoreResult() {
57-
var versionArray = devextremeVersion.split("."),
58-
major = Number(versionArray[0]),
59-
minor = Number(versionArray[1]);
60-
61-
return major < 18 || major === 18 && minor < 2;
62+
return devextremeVersion[0] < 18
63+
|| devextremeVersion[0] === 18 && devextremeVersion[1] < 2;
6264
}
6365

6466
QUnit.testStart(function() {
@@ -869,4 +871,20 @@
869871
done();
870872
}
871873
});
874+
875+
if(devextremeVersion[0] >= 19) {
876+
QUnit.test("ajax.inject", function(assert) {
877+
var done = assert.async();
878+
879+
function customSendRequest() {
880+
ajaxUtility.resetInjection();
881+
assert.expect(0);
882+
done();
883+
return NEVER_RESOLVE;
884+
}
885+
886+
ajaxUtility.inject({ sendRequest: customSendRequest });
887+
createStore({ loadUrl: "/"}).load();
888+
})
889+
}
872890
});

js/dx.aspnet.data.js

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,32 @@
99
if(typeof define === "function" && define.amd) {
1010
define(function(require, exports, module) {
1111
module.exports = factory(
12-
require("jquery"),
12+
require("devextreme/core/utils/ajax"),
13+
require("jquery").Deferred,
14+
require("jquery").extend,
1315
require("devextreme/data/custom_store"),
1416
require("devextreme/data/utils")
1517
);
1618
});
1719
} else if (typeof module === "object" && module.exports) {
1820
module.exports = factory(
19-
require("jquery"),
21+
require("devextreme/core/utils/ajax"),
22+
require("jquery").Deferred,
23+
require("jquery").extend,
2024
require("devextreme/data/custom_store"),
2125
require("devextreme/data/utils")
2226
);
2327
} else {
2428
DevExpress.data.AspNet = factory(
25-
jQuery,
29+
DevExpress.utils.ajax || { sendRequest: jQuery.ajax },
30+
jQuery.Deferred,
31+
jQuery.extend,
2632
DevExpress.data.CustomStore,
2733
DevExpress.data.utils
2834
);
2935
}
3036

31-
})(function($, CustomStore, dataUtils) {
37+
})(function(ajaxUtility, Deferred, extend, CustomStore, dataUtils) {
3238
"use strict";
3339

3440
var CUSTOM_STORE_OPTIONS = [
@@ -55,7 +61,7 @@
5561
onAjaxError = options.onAjaxError;
5662

5763
function send(operation, requiresKey, ajaxSettings, customSuccessHandler) {
58-
var d = $.Deferred();
64+
var d = Deferred();
5965

6066
if(requiresKey && !keyExpr) {
6167
d.reject(new Error("Primary key is not specified (operation: '" + operation + "', url: '" + ajaxSettings.url + "')"));
@@ -70,14 +76,14 @@
7076
if(onBeforeSend)
7177
onBeforeSend(operation, ajaxSettings);
7278

73-
$.ajax(ajaxSettings)
74-
.done(function(res, textStatus, xhr) {
79+
ajaxUtility.sendRequest(ajaxSettings).then(
80+
function(res, textStatus, xhr) {
7581
if(customSuccessHandler)
7682
customSuccessHandler(d, res, xhr);
7783
else
7884
d.resolve();
79-
})
80-
.fail(function(xhr, textStatus) {
85+
},
86+
function(xhr, textStatus) {
8187
var error = getErrorMessageFromXhr(xhr);
8288

8389
if(onAjaxError) {
@@ -90,7 +96,8 @@
9096
d.reject(error);
9197
else
9298
d.reject(xhr, textStatus);
93-
});
99+
}
100+
);
94101
}
95102

96103
return d.promise();
@@ -133,7 +140,7 @@
133140
}
134141

135142
if(Array.isArray(filter)) {
136-
filter = $.extend(true, [], filter);
143+
filter = extend(true, [], filter);
137144
stringifyDatesInFilter(filter);
138145
result.filter = JSON.stringify(filter);
139146
}
@@ -151,7 +158,7 @@
151158
}
152159
}
153160

154-
$.extend(result, loadParams);
161+
extend(result, loadParams);
155162

156163
return result;
157164
}

0 commit comments

Comments
 (0)