Skip to content

Commit 1549e3b

Browse files
committed
移动浏览器版本的 AV._ajax 到 ajax-browser.js
1 parent 056d77d commit 1549e3b

File tree

4 files changed

+88
-95
lines changed

4 files changed

+88
-95
lines changed

lib/av.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,7 @@ require('./status')(AV);
3434
require('./search')(AV);
3535
require('./insight')(AV);
3636

37-
// Node.js platform specific patches
38-
if (AV._isNode) {
39-
AV._ajax = require('./browserify-wrapper/ajax');
40-
}
37+
AV._ajax = require('./browserify-wrapper/ajax');
4138

4239
// Backward compatibility
4340
AV.AV = AV;
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
var XMLHttpRequest = require('./xmlhttprequest').XMLHttpRequest;
2+
var Promise = require('../promise');
3+
4+
module.exports = function _ajax(method, url, data, success, error) {
5+
var options = {
6+
success: success,
7+
error: error
8+
};
9+
10+
if (useXDomainRequest()) {
11+
return ajaxIE8(method, url, data)._thenRunCallbacks(options);
12+
}
13+
14+
var promise = new Promise();
15+
var handled = false;
16+
17+
var xhr = new XMLHttpRequest();
18+
xhr.onreadystatechange = function() {
19+
if (xhr.readyState === 4) {
20+
if (handled) {
21+
return;
22+
}
23+
handled = true;
24+
25+
if (xhr.status >= 200 && xhr.status < 300) {
26+
var response;
27+
try {
28+
response = JSON.parse(xhr.responseText);
29+
} catch (e) {
30+
promise.reject(e);
31+
}
32+
if (response) {
33+
promise.resolve(response, xhr.status, xhr);
34+
}
35+
} else {
36+
promise.reject(xhr);
37+
}
38+
}
39+
};
40+
xhr.open(method, url, true);
41+
xhr.setRequestHeader("Content-Type", "text/plain"); // avoid pre-flight.
42+
xhr.send(data);
43+
return promise._thenRunCallbacks(options);
44+
};
45+
46+
function useXDomainRequest() {
47+
if (typeof(XDomainRequest) !== "undefined") {
48+
// We're in IE 8+.
49+
if ('withCredentials' in new XMLHttpRequest()) {
50+
// We're in IE 10+.
51+
return false;
52+
}
53+
return true;
54+
}
55+
return false;
56+
}
57+
58+
function ajaxIE8(method, url, data) {
59+
var promise = new Promise();
60+
var xdr = new XDomainRequest();
61+
xdr.onload = function() {
62+
var response;
63+
try {
64+
response = JSON.parse(xdr.responseText);
65+
} catch (e) {
66+
promise.reject(e);
67+
}
68+
if (response) {
69+
promise.resolve(response);
70+
}
71+
};
72+
xdr.onerror = xdr.ontimeout = function() {
73+
// Let's fake a real error message.
74+
var fakeResponse = {
75+
responseText: JSON.stringify({
76+
code: AV.Error.X_DOMAIN_REQUEST,
77+
error: "IE's XDomainRequest does not supply error info."
78+
})
79+
};
80+
promise.reject(xdr);
81+
};
82+
xdr.onprogress = function() {};
83+
xdr.open(method, url);
84+
xdr.send(data);
85+
return promise;
86+
}

lib/utils.js

Lines changed: 0 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -246,96 +246,6 @@ module.exports = function(AV) {
246246
return new Date(Date.UTC(year, month, day, hour, minute, second, milli));
247247
};
248248

249-
AV._ajaxIE8 = function(method, url, data) {
250-
var promise = new AV.Promise();
251-
var xdr = new XDomainRequest();
252-
xdr.onload = function() {
253-
var response;
254-
try {
255-
response = JSON.parse(xdr.responseText);
256-
} catch (e) {
257-
promise.reject(e);
258-
}
259-
if (response) {
260-
promise.resolve(response);
261-
}
262-
};
263-
xdr.onerror = xdr.ontimeout = function() {
264-
// Let's fake a real error message.
265-
var fakeResponse = {
266-
responseText: JSON.stringify({
267-
code: AV.Error.X_DOMAIN_REQUEST,
268-
error: "IE's XDomainRequest does not supply error info."
269-
})
270-
};
271-
promise.reject(xdr);
272-
};
273-
xdr.onprogress = function() {};
274-
xdr.open(method, url);
275-
xdr.send(data);
276-
return promise;
277-
};
278-
279-
AV._useXDomainRequest = function() {
280-
if (typeof(XDomainRequest) !== "undefined") {
281-
// We're in IE 8+.
282-
if ('withCredentials' in new XMLHttpRequest()) {
283-
// We're in IE 10+.
284-
return false;
285-
}
286-
return true;
287-
}
288-
return false;
289-
};
290-
291-
AV._ajax = function(method, url, data, success, error) {
292-
var options = {
293-
success: success,
294-
error: error
295-
};
296-
297-
if (AV._useXDomainRequest()) {
298-
return AV._ajaxIE8(method, url, data)._thenRunCallbacks(options);
299-
}
300-
301-
var promise = new AV.Promise();
302-
var handled = false;
303-
304-
var xhr = new AV.XMLHttpRequest();
305-
xhr.onreadystatechange = function() {
306-
if (xhr.readyState === 4) {
307-
if (handled) {
308-
return;
309-
}
310-
handled = true;
311-
312-
if (xhr.status >= 200 && xhr.status < 300) {
313-
var response;
314-
try {
315-
response = JSON.parse(xhr.responseText);
316-
} catch (e) {
317-
promise.reject(e);
318-
}
319-
if (response) {
320-
promise.resolve(response, xhr.status, xhr);
321-
}
322-
} else {
323-
promise.reject(xhr);
324-
}
325-
}
326-
};
327-
xhr.open(method, url, true);
328-
xhr.setRequestHeader("Content-Type", "text/plain"); // avoid pre-flight.
329-
if (AV._isNode) {
330-
// Add a special user agent just for request from node.js.
331-
xhr.setRequestHeader("User-Agent",
332-
"AV/" + AV.VERSION +
333-
" (NodeJS " + process.versions.node + ")");
334-
}
335-
xhr.send(data);
336-
return promise._thenRunCallbacks(options);
337-
};
338-
339249
// A self-propagating extend function.
340250
AV._extend = function(protoProps, classProps) {
341251
var child = inherits(this, protoProps, classProps);

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
},
4141
"browser": {
4242
"react-native": false,
43-
"./lib/browserify-wrapper/ajax.js": false,
43+
"./lib/browserify-wrapper/ajax.js": "./lib/browserify-wrapper/ajax-browser.js",
4444
"./lib/browserify-wrapper/upload.js": "./lib/browserify-wrapper/upload-browser.js",
4545
"./lib/browserify-wrapper/xmlhttprequest.js": "./lib/browserify-wrapper/xmlhttprequest-browser.js",
4646
"./lib/browserify-wrapper/localStorage.js": "./lib/browserify-wrapper/localstorage-browser.js",

0 commit comments

Comments
 (0)