Skip to content

Commit 7ace511

Browse files
author
caoxinke
committed
优化Request.js。
1 parent fcd1b35 commit 7ace511

File tree

8 files changed

+3469
-2144
lines changed

8 files changed

+3469
-2144
lines changed

build/deps.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ var deps = {
44
"./src/common/Base.js",
55
"./src/common/REST.js"
66
],
7+
"util":[
8+
"./src/common/util/Request.js",
9+
],
710
"format": [
811
"./src/common/format/GeoJSON.js"
912
],

dist/iclient9-leaflet.js

Lines changed: 1805 additions & 1166 deletions
Large diffs are not rendered by default.

dist/iclient9-openlayers.js

Lines changed: 1532 additions & 893 deletions
Large diffs are not rendered by default.

src/common/iPortal/iPortalService.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,10 @@ SuperMap.iPortalService = SuperMap.Class({
5353
tags: this.tags,
5454
thumbnail: this.thumbnail
5555
};
56-
return this.request.put(this.serviceUrl, serviceUpdateParam);
56+
var options = {
57+
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
58+
};
59+
return this.request.put(this.serviceUrl, JSON.stringify(serviceUpdateParam), options);
5760
}
5861

5962
});

src/common/online/OnlineData.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
* Online myData服务
33
*/
44
require('../util/Request');
5-
require('./DataInfo');
65
SuperMap.OnlineData = SuperMap.Class({
76
//MD5
87
MD5: null,

src/common/util/Request.js

Lines changed: 123 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,126 +1,166 @@
11
require("whatwg-fetch/fetch");
22
var fetchJsonp = require('fetch-jsonp/build/fetch-jsonp');
33

4+
SuperMap.Support = {
5+
cors: ((window.XMLHttpRequest && 'withCredentials' in new window.XMLHttpRequest()))
6+
};
7+
48
SuperMap.Request = SuperMap.Class({
59

610
initialize: function () {
711
},
812

9-
get: function (url, params) {
13+
get: function (url, params, options) {
14+
options = options || {};
1015
var type = 'GET';
11-
return this._processAsyn(this.parseUrl(url, params, type), type);
16+
url = url.endWith('.json') ? url : url + '.json';
17+
url = params ? SuperMap.Util.urlAppend(url, this.getParameterString(params || {})) : url;
18+
var tokenParam = '';
19+
var separator = url.indexOf("?") > -1 ? "&" : "?";
20+
if (SuperMap.Credential.CREDENTIAL && SuperMap.Credential.CREDENTIAL.getUrlParameters()) {
21+
tokenParam = SuperMap.Credential.CREDENTIAL.getUrlParameters();
22+
}
23+
var requestLength = url.length;
24+
if (requestLength <= 2000) {
25+
url = tokenParam !== '' ? url + separator + tokenParam : url;
26+
if (SuperMap.Support.cors) {
27+
return this._fetch(url, params, options, type);
28+
}
29+
if (!SuperMap.Util.isInTheSameDomain(url)) {
30+
url = url.replace('.json', '.jsonp');
31+
return this._fetchJsonp(url, options);
32+
}
33+
}
34+
url = url.substring(0, url.indexOf('?')) + '_method= GET';
35+
url = tokenParam !== '' ? url + '&' + tokenParam : url;
36+
return this.post(url, params, options);
1237
},
1338

14-
delete: function (url, params) {
39+
delete: function (url, params, options) {
40+
options = options || {};
41+
url = url.endWith('.json') ? url : url + '.json';
1542
var type = 'DELETE';
16-
return this._processAsyn(this.parseUrl(url, params, type), type);
43+
var requestLength = url.length;
44+
url = params ? SuperMap.Util.urlAppend(url, this.getParameterString(params || {})) : url;
45+
var tokenParam = '';
46+
var separator = url.indexOf("?") > -1 ? "&" : "?";
47+
if (SuperMap.Credential.CREDENTIAL && SuperMap.Credential.CREDENTIAL.getUrlParameters()) {
48+
tokenParam = SuperMap.Credential.CREDENTIAL.getUrlParameters();
49+
}
50+
if (requestLength <= 2000) {
51+
if (SuperMap.Support.cors) {
52+
url = tokenParam !== '' ? url + separator + tokenParam : url;
53+
return this._fetch(url, params, options, type);
54+
}
55+
}
56+
url = url.substring(0, url.indexOf('?')) + '_method= DELETE';
57+
url = tokenParam !== '' ? url + '&' + tokenParam : url;
58+
return this.post(url, params, options);
1759
},
1860

19-
post: function (url, params) {
61+
post: function (url, params, options) {
62+
options = options || {};
2063
var type = 'POST';
21-
return this._processAsyn(this.parseUrl(url, params, type), type, params);
64+
url = url.endWith('.json') ? url : url + '.json';
65+
var separator = url.indexOf("?") > -1 ? "&" : "?";
66+
if (SuperMap.Credential.CREDENTIAL && SuperMap.Credential.CREDENTIAL.getUrlParameters()) {
67+
url += separator + SuperMap.Credential.CREDENTIAL.getUrlParameters();
68+
}
69+
return this._fetch(url, params, options, type);
2270
},
2371

24-
put: function (url, params) {
72+
put: function (url, params, options) {
73+
options = options || {};
2574
var type = 'PUT';
26-
return this._processAsyn(this.parseUrl(url, params, type), type, params);
27-
},
28-
29-
parseUrl: function (url, params, type) {
30-
url = url + '.json';
31-
if (SuperMap.Credential.CREDENTIAL) {
32-
url += '?' + SuperMap.Credential.CREDENTIAL.getUrlParameters();
33-
}
34-
if (type !== 'POST' && type !== 'PUT' && params && this._parseParamsToString(params) !== '') {
35-
params = this.toJSON(params);
36-
url += '&' + this._parseParamsToString(params);
75+
url = url.endWith('.json') ? url : url + '.json';
76+
var separator = url.indexOf("?") > -1 ? "&" : "?";
77+
if (SuperMap.Credential.CREDENTIAL && SuperMap.Credential.CREDENTIAL.getUrlParameters()) {
78+
url += separator + SuperMap.Credential.CREDENTIAL.getUrlParameters();
3779
}
38-
return url;
80+
return this._fetch(url, params, options, type);
3981
},
4082

41-
_processAsyn: function (url, type, params) {
42-
if (!SuperMap.Util.isInTheSameDomain(url) && type === 'GET') {
43-
url = url.replace('.json', '.jsonp');
44-
return fetchJsonp(url, {method: type})
45-
.then(function (response) {
46-
return response.json();
47-
}).then(function (json) {
48-
return json;
49-
});
50-
}
51-
if (type === 'GET' || type === 'DELETE') {
52-
return fetch(url, {method: type})
53-
.then(function (response) {
54-
return response.json();
55-
}).then(function (json) {
56-
return json;
57-
});
83+
_fetch: function (url, params, options, type) {
84+
if (options.timeout) {
85+
return this.timeout(options.timeout, fetch(url, {
86+
method: type,
87+
headers: options.headers,
88+
body: type === 'PUT' || type === 'POST' ? params : undefined,
89+
credentials: options.withCredentials ? 'include' : 'omit',
90+
mode: 'cors'
91+
}).then(function (response) {
92+
return response.json();
93+
}).then(function (json) {
94+
return json;
95+
}));
5896
}
5997
return fetch(url, {
6098
method: type,
61-
headers: {
62-
"Content-Type": "application/x-www-form-urlencoded"
63-
},
64-
body: JSON.stringify(params)
99+
body: type === 'PUT' || type === 'POST' ? params : undefined,
100+
headers: options.headers
101+
}).then(function (response) {
102+
return response.json();
103+
}).then(function (json) {
104+
return json;
65105
})
106+
},
107+
108+
_fetchJsonp: function (url, options) {
109+
return fetchJsonp(url, {method: 'GET', timeout: options.timeout})
66110
.then(function (response) {
67111
return response.json();
68112
}).then(function (json) {
69113
return json;
70114
});
71115
},
72116

73-
_parseParamsToString: function (queryParams) {
74-
var params = '';
75-
if (!queryParams) {
76-
return params;
77-
}
78-
var queryMap = {};
79-
for (key in queryParams) {
80-
if (queryParams[key] instanceof Array) {
81-
queryMap[key] = this._ArrayToString(queryParams[key]);
82-
continue;
83-
}
84-
queryMap[key] = queryParams[key];
85-
}
86-
for (var i in queryMap) {
87-
params += i + '=' + queryMap[i] + '&';
88-
}
89-
return params.substring(0, params.length - 1);
90-
},
91-
92-
_ArrayToString: function (array) {
93-
if (!(array instanceof Array)) {
94-
return array;
95-
}
96-
var arrayStr = '[';
97-
for (var i = 0; i < array.length; i++) {
98-
if (typeof array[i] !== 'string') {
99-
return "[" + array.toString() + "]";
100-
}
101-
arrayStr += "\"" + array[i] + "\"";
102-
if (i !== array.length - 1) {
103-
arrayStr += ',';
104-
continue;
105-
}
106-
arrayStr += ']';
107-
}
108-
return arrayStr;
117+
timeout: function (seconds, promise) {
118+
return new Promise(function (resolve, reject) {
119+
setTimeout(function () {
120+
reject(new Error("timeout"))
121+
}, seconds)
122+
promise.then(resolve, reject)
123+
})
109124
},
110125

111-
toJSON: function (object) {
112-
var json = {};
113-
for (var key in object) {
114-
if (typeof object[key] === 'function') {
115-
continue;
126+
getParameterString: function (params) {
127+
var paramsArray = [];
128+
for (var key in params) {
129+
var value = params[key];
130+
if ((value != null) && (typeof value !== 'function')) {
131+
var encodedValue;
132+
if (typeof value === 'object' && value.constructor === Array) {
133+
var encodedItemArray = [];
134+
var item;
135+
for (var itemIndex = 0, len = value.length; itemIndex < len; itemIndex++) {
136+
item = value[itemIndex];
137+
encodedItemArray.push(encodeURIComponent(
138+
(item === null || item === undefined) ? "" : item)
139+
);
140+
}
141+
encodedValue = '[' + encodedItemArray.join(",") + ']';
142+
}
143+
else {
144+
encodedValue = encodeURIComponent(value);
145+
}
146+
paramsArray.push(encodeURIComponent(key) + "=" + encodedValue);
116147
}
117-
json[key] = object[key];
118148
}
119-
return json;
149+
return paramsArray.join("&");
120150
}
121151

122152
});
123153

154+
String.prototype.endWith = function (s) {
155+
if (s === null || s === "" || this.length === 0 || s.length > this.length)
156+
return false;
157+
if (this.substring(this.length - s.length) == s)
158+
return true;
159+
else
160+
return false;
161+
return true;
162+
}
163+
124164
module.exports = function () {
125165
return new SuperMap.Request();
126166
};

src/leaflet/services/ServiceBase.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* 服务基类
44
*/
55
require('../core/Base');
6+
require('../../common/util/Request');
67

78
ServiceBase = L.Evented.extend({
89
options: {

src/openlayers/services/ServiceBase.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* 服务基类
44
*/
55
require('../core/Base');
6+
require('../../common/util/Request');
67

78
ol.supermap.ServiceBase = function (url, options) {
89
ol.Observable.call(this);

0 commit comments

Comments
 (0)