项目原始demo,不改动
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
To repozytorium jest zarchiwizowane. Możesz wyświetlać pliki i je sklonować, ale nie możesz do niego przepychać zmian lub otwierać zgłoszeń/Pull Requestów.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. 'use strict';
  2. var utils = require('./../utils');
  3. var settle = require('./../core/settle');
  4. var buildURL = require('./../helpers/buildURL');
  5. var parseHeaders = require('./../helpers/parseHeaders');
  6. var isURLSameOrigin = require('./../helpers/isURLSameOrigin');
  7. var createError = require('../core/createError');
  8. module.exports = function xhrAdapter(config) {
  9. return new Promise(function dispatchXhrRequest(resolve, reject) {
  10. var requestData = config.data;
  11. var requestHeaders = config.headers;
  12. if (utils.isFormData(requestData)) {
  13. delete requestHeaders['Content-Type']; // Let the browser set it
  14. }
  15. var request = new XMLHttpRequest();
  16. // HTTP basic authentication
  17. if (config.auth) {
  18. var username = config.auth.username || '';
  19. var password = config.auth.password || '';
  20. requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
  21. }
  22. request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);
  23. // Set the request timeout in MS
  24. request.timeout = config.timeout;
  25. // Listen for ready state
  26. request.onreadystatechange = function handleLoad() {
  27. if (!request || request.readyState !== 4) {
  28. return;
  29. }
  30. // The request errored out and we didn't get a response, this will be
  31. // handled by onerror instead
  32. // With one exception: request that using file: protocol, most browsers
  33. // will return status as 0 even though it's a successful request
  34. if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
  35. return;
  36. }
  37. // Prepare the response
  38. var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
  39. var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;
  40. var response = {
  41. data: responseData,
  42. status: request.status,
  43. statusText: request.statusText,
  44. headers: responseHeaders,
  45. config: config,
  46. request: request
  47. };
  48. settle(resolve, reject, response);
  49. // Clean up request
  50. request = null;
  51. };
  52. // Handle browser request cancellation (as opposed to a manual cancellation)
  53. request.onabort = function handleAbort() {
  54. if (!request) {
  55. return;
  56. }
  57. reject(createError('Request aborted', config, 'ECONNABORTED', request));
  58. // Clean up request
  59. request = null;
  60. };
  61. // Handle low level network errors
  62. request.onerror = function handleError() {
  63. // Real errors are hidden from us by the browser
  64. // onerror should only fire if it's a network error
  65. reject(createError('Network Error', config, null, request));
  66. // Clean up request
  67. request = null;
  68. };
  69. // Handle timeout
  70. request.ontimeout = function handleTimeout() {
  71. reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',
  72. request));
  73. // Clean up request
  74. request = null;
  75. };
  76. // Add xsrf header
  77. // This is only done if running in a standard browser environment.
  78. // Specifically not if we're in a web worker, or react-native.
  79. if (utils.isStandardBrowserEnv()) {
  80. var cookies = require('./../helpers/cookies');
  81. // Add xsrf header
  82. var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?
  83. cookies.read(config.xsrfCookieName) :
  84. undefined;
  85. if (xsrfValue) {
  86. requestHeaders[config.xsrfHeaderName] = xsrfValue;
  87. }
  88. }
  89. // Add headers to the request
  90. if ('setRequestHeader' in request) {
  91. utils.forEach(requestHeaders, function setRequestHeader(val, key) {
  92. if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
  93. // Remove Content-Type if data is undefined
  94. delete requestHeaders[key];
  95. } else {
  96. // Otherwise add header to the request
  97. request.setRequestHeader(key, val);
  98. }
  99. });
  100. }
  101. // Add withCredentials to request if needed
  102. if (config.withCredentials) {
  103. request.withCredentials = true;
  104. }
  105. // Add responseType to request if needed
  106. if (config.responseType) {
  107. try {
  108. request.responseType = config.responseType;
  109. } catch (e) {
  110. // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.
  111. // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.
  112. if (config.responseType !== 'json') {
  113. throw e;
  114. }
  115. }
  116. }
  117. // Handle progress if needed
  118. if (typeof config.onDownloadProgress === 'function') {
  119. request.addEventListener('progress', config.onDownloadProgress);
  120. }
  121. // Not all browsers support upload events
  122. if (typeof config.onUploadProgress === 'function' && request.upload) {
  123. request.upload.addEventListener('progress', config.onUploadProgress);
  124. }
  125. if (config.cancelToken) {
  126. // Handle cancellation
  127. config.cancelToken.promise.then(function onCanceled(cancel) {
  128. if (!request) {
  129. return;
  130. }
  131. request.abort();
  132. reject(cancel);
  133. // Clean up request
  134. request = null;
  135. });
  136. }
  137. if (requestData === undefined) {
  138. requestData = null;
  139. }
  140. // Send the request
  141. request.send(requestData);
  142. });
  143. };