2
0
mirror of https://github.com/tenrok/axios.git synced 2026-06-08 17:22:34 +03:00

add xDomainRequest adapter

This commit is contained in:
Vineet Hawal
2015-10-29 12:51:37 +05:30
parent 11c12b2c65
commit a59bc8d2ae
11 changed files with 1207 additions and 197 deletions
+28 -16
View File
@@ -27,18 +27,30 @@ module.exports = function xhrAdapter(resolve, reject, config) {
delete requestHeaders['Content-Type']; // Let the browser set it
}
var adapter = (XMLHttpRequest || ActiveXObject),
loadEvent = 'onreadystatechange',
xDomain = false;
// For IE 8/9 CORS support
if(config.xDomain && (window && window.XDomainRequest)){
adapter = window.XDomainRequest;
loadEvent = 'onload';
xDomain = true;
}
// Create the request
var request = new (XMLHttpRequest || ActiveXObject)('Microsoft.XMLHTTP');
var request = new adapter('Microsoft.XMLHTTP');
request.open(config.method.toUpperCase(), buildUrl(config.url, config.params, config.paramsSerializer), true);
// Set the request timeout in MS
request.timeout = config.timeout;
// Listen for ready state
request.onreadystatechange = function () {
if (request && request.readyState === 4) {
request[loadEvent] = function () {
if (request && (request.readyState === 4 || xDomain)) {
// Prepare the response
var responseHeaders = parseHeaders(request.getAllResponseHeaders());
var responseHeaders = xDomain ? null : parseHeaders(request.getAllResponseHeaders());
var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;
var response = {
data: transformData(
@@ -51,9 +63,8 @@ module.exports = function xhrAdapter(resolve, reject, config) {
headers: responseHeaders,
config: config
};
// Resolve or reject the Promise based on the status
(request.status >= 200 && request.status < 300 ?
((request.status >= 200 && request.status < 300) || (request.responseText && xDomain) ?
resolve :
reject)(response);
@@ -80,16 +91,17 @@ module.exports = function xhrAdapter(resolve, reject, config) {
}
// Add headers to the request
utils.forEach(requestHeaders, function (val, key) {
// Remove Content-Type if data is undefined
if (!data && key.toLowerCase() === 'content-type') {
delete requestHeaders[key];
}
// Otherwise add header to the request
else {
request.setRequestHeader(key, val);
}
});
if(!xDomain)
utils.forEach(requestHeaders, function (val, key) {
// Remove Content-Type if data is undefined
if (!data && key.toLowerCase() === 'content-type') {
delete requestHeaders[key];
}
// Otherwise add header to the request
else {
request.setRequestHeader(key, val);
}
});
// Add withCredentials to request if needed
if (config.withCredentials) {
+2
View File
@@ -5,6 +5,8 @@ var utils = require('./utils');
var dispatchRequest = require('./core/dispatchRequest');
var InterceptorManager = require('./core/InterceptorManager');
require('es6-promise').polyfill();
function Axios (defaultConfig) {
this.defaultConfig = utils.merge({
headers: {},