ajax.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. const defaultError = 'Server Error 500';
  2. const defaultTimeout = 'Request Timeout';
  3. const xhr = (method, url, data = null, cb) => {
  4. return new window.Promise((resolve, reject) => {
  5. const xhr = new XMLHttpRequest();
  6. const doReject = (xhr) => {
  7. reject(xhr.response || xhr.statusText || defaultError);
  8. };
  9. xhr.open(method, url);
  10. xhr.setRequestHeader('Content-Type', 'application/json');
  11. xhr.timeout = 10000;
  12. if (cb) cb(xhr);
  13. xhr.onload = () => {
  14. if (xhr.readyState === 4) {
  15. if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {
  16. let response = xhr.response;
  17. const type = xhr.getResponseHeader('Content-Type');
  18. if (type.indexOf('zip') > -1) {
  19. let filename = 'style.zip';
  20. const disposition = xhr.getResponseHeader('content-disposition');
  21. if (disposition && disposition.indexOf('attachment') !== -1) {
  22. var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
  23. var matches = filenameRegex.exec(disposition);
  24. if (matches != null && matches[1]) {
  25. filename = matches[1].replace(/['"]/g, '');
  26. }
  27. }
  28. var blob = new Blob([response], { type });
  29. var zipUrl = URL.createObjectURL(blob);
  30. var link = document.createElement('a');
  31. link.href = zipUrl;
  32. link.download = filename;
  33. link.click();
  34. resolve(response);
  35. return;
  36. }
  37. try {
  38. response = JSON.parse(xhr.response);
  39. } catch (e) {}
  40. resolve(response);
  41. } else {
  42. doReject(xhr);
  43. }
  44. } else {
  45. doReject(xhr);
  46. }
  47. };
  48. xhr.onerror = () => {
  49. doReject(xhr);
  50. };
  51. xhr.ontimeout = () => {
  52. xhr.abort();
  53. reject(defaultTimeout);
  54. };
  55. xhr.send(JSON.stringify(data));
  56. });
  57. };
  58. export const post = (url, data, cb) => {
  59. return xhr('POST', url, data, cb);
  60. };
  61. export const get = (url) => {
  62. return xhr('GET', url);
  63. };