Advertisement
stuppid_bot

AjaxLib

Sep 7th, 2014
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // requires common.js
  2. // Namespace Ajax
  3. var Ajax = {
  4.     init: function (defaults) {
  5.         function ajax(opts) {
  6.             opts = extend({
  7.                 method: 'GET',
  8.                 url: '',
  9.                 params: {}, // параметры URL
  10.                 cache: ajax.defaults.cache,
  11.                 async: true,
  12.                 user: '',
  13.                 password: '',
  14.                 timeout: ajax.defaults.timeout,
  15.                 responseType: 0, // string
  16.                 overrideMimeType: 0, // string
  17.                 withCredentials: ajax.defaults.withCredentials,
  18.                 headers: {},
  19.                 data: null,
  20.             }, opts);
  21.             var methods = {};
  22.             var xhr = new XMLHttpRequest;
  23.             var params = clone(opts.params);
  24.             if (opts.method === 'GET' && opts.cache === false) {
  25.                 params.__t = new Date().getTime(); // url?__t=1410142975437
  26.             }
  27.             var url = opts.url;
  28.             if (!isEmpty(params)) {
  29.                 url = url + (url.indexOf('?') == -1 ? '?' : '&') + buildQuery(params);
  30.             }
  31.             xhr.open(opts.method, url, opts.async, opts.user, opts.password);
  32.             if (opts.timeout) {
  33.                 xhr.timeout = opts.timeout;
  34.             }
  35.             if (opts.responseType) {
  36.                 xhr.responseType = opts.responseType;
  37.             }
  38.             if (opts.overrideMimeType) {
  39.                 xhr.overrideMimeType(opts.overrideMimeType);
  40.             }
  41.             xhr.withCredentials = opts.withCredentials;
  42.             var headers = extend(Ajax.normalizeHeaders(ajax.defaults.headers)
  43.                 , Ajax.normalizeHeaders(opts.headers));
  44.             for (var h in headers) {
  45.                 xhr.setRequestHeader(h, headers[h]);
  46.             }
  47.             xhr.onload = function () {
  48.                 if (xhr.status >= 200 && xhr.status < 300) {
  49.                     if (methods.done) {
  50.                         methods.done(xhr.response, xhr);
  51.                     }
  52.                 } else {
  53.                     if (methods.fail) {
  54.                         methods.fail(xhr.response, xhr.status, xhr);
  55.                     }
  56.                 }
  57.                 if (methods.always) {
  58.                     methods.always(xhr.response, xhr.status, xhr);
  59.                 }
  60.             };
  61.             xhr.send(opts.data);
  62.             var promises = {};
  63.             each(['done', 'fail', 'always'], function (key) {
  64.                 promises[key] = function (cb) {
  65.                     methods[key] = cb;
  66.                     return promises;
  67.                 };
  68.             });
  69.             return promises;
  70.         }
  71.         ajax.get = function(url, opts) {
  72.             opts = opts ? clone(opts) : {};
  73.             opts.method = 'GET';
  74.             opts.url = url;
  75.             return ajax(opts);
  76.         };
  77.         ajax.post = function(url, data, opts) {
  78.             opts = opts ? clone(opts) : {};
  79.             opts.method = 'POST';
  80.             opts.url = url;
  81.             if (false === data instanceof FormData) {
  82.                 opts.headers = opts.headers || {};
  83.                 opts.headers['content-type'] = 'application/x-www-form-urlencoded';
  84.                 data = buildQuery(data);
  85.             }
  86.             opts.data = data;
  87.             return ajax(opts);
  88.         };
  89.         ajax.defaults = extend({
  90.             headers: {},
  91.             timeout: 0,
  92.             withCredentials: false,
  93.             cache: true,
  94.         }, defaults);
  95.         return ajax;
  96.     },
  97.     normalizeHeaders: function (headers) {
  98.         var r = {};
  99.         for (var k in headers) {
  100.             if (hasOwn(headers, k)) {
  101.                 r[trim(k).toLowerCase()] = headers[k];
  102.             }
  103.         }
  104.         return r;
  105.     },
  106. };
  107.  
  108. var ajax = Ajax.init();
  109. // f(args).done(function () {}).fail(function () {}).always(function () {});
  110. // ajax(opts)
  111. // ajax.get(url[, opts])
  112. // ajax.post(url, data[, opts])
  113. // GET /search?q=%D1%81%D0%B8%D1%81%D1%8C%D0%BA%D0%B8&__t=1410145166266
  114. // ajax.get('/search', {cache: false, params: {q: 'сиськи'}}).done(function (data) { ... });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement