stuppid_bot

Untitled

May 4th, 2013
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. querystring = {
  2.     parse: function(str, sep, eq) {
  3.         eq = eq || '=';
  4.         var o = {};
  5.  
  6.         if (str) {
  7.             var sp = str.split(sep || '&'),
  8.                 i = 0,
  9.                 l = sp.length;
  10.  
  11.             while (i < l) {
  12.                 var sp1 = sp[i++].split(eq);
  13.  
  14.                 if (sp1[0] !== '') {
  15.                     o[sp1[0]] = sp1[1] === undefined ? '' : decodeURIComponent(sp1[1]);
  16.                 }
  17.             }
  18.         }
  19.  
  20.         return o;
  21.     },
  22.    
  23.     stringify: function(obj, sep, eq) {
  24.         sep = sep || '&';
  25.         eq = eq || '=';
  26.         var a = [];
  27.  
  28.         for (var i in obj) {
  29.             a.push( i + (obj[i] !== '' ? eq + encodeURIComponent(obj[i]) : '') );
  30.         }
  31.  
  32.         return a.join(sep);
  33.     }
  34. };
  35.  
  36. /**
  37.  * Ajax-обертка
  38.  */
  39. ajax = new (function(){
  40.     var request = this.request = function(method, url, data, options) {
  41.         options = options || {};
  42.         var xhr = new XMLHttpRequest;      
  43.        
  44.         if (options.done || options.fail) {
  45.             xhr.onreadystatechange = function() {
  46.                 if (xhr.readyState == 4) {
  47.                     if (xhr.status >= 200 && xhr.status < 300) {
  48.                         if (options.done) {
  49.                             options.done(xhr.response);
  50.                         }
  51.  
  52.                         return;
  53.                     }
  54.  
  55.                     if (options.fail) {
  56.                         options.fail(xhr.status, xhr.statusText);
  57.                     }
  58.                 }
  59.             }
  60.         }
  61.  
  62.         xhr.open(method, url);        
  63.         xhr.responseType = options.type || 'text';
  64.  
  65.         if (options.before) {
  66.             options.before(xhr);
  67.         }
  68.        
  69.         // xhr.send(data);
  70.         try {
  71.             xhr.send(data);
  72.         }
  73.         catch (e) {}    
  74.     };
  75.      
  76.     this.get = function(url, options) {
  77.         request('GET', url, null, options);
  78.     };
  79.    
  80.     this.rawpost = function(url, data, options) {
  81.         request('POST', url, data, options);
  82.     };
  83.    
  84.     this.put = function(url, data, options) {
  85.         request('PUT', url, data, options);
  86.     };
  87.  
  88.     /**
  89.      * Отправить данные методом POST
  90.      *  
  91.      * @param url адрес документа
  92.      * @param data ассоциативный массив
  93.      * @param options.type 'arraybuffer' | 'blob' | 'document' | 'json' | 'text' тип передаваемых данных в options.done
  94.      * @param options.done function(response) { ... } функция-обработчик, которая вызывается при успешном выполнении запроса
  95.      * @param options.fail function(code, text) { ... } функция-обработчик, которая вызывается при возвращении сервером статуса отличного от 2XX
  96.      * @param options.before function(xhr) { ... } вызывается до отправки запроса
  97.      */
  98.     this.post = function(url, data, options) {  
  99.         var fn = (options = options || {}).before;
  100.        
  101.         options.before = function(xhr) {
  102.             if (fn) {
  103.                 fn(xhr);
  104.             }
  105.            
  106.             xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  107.         }
  108.        
  109.         this.rawpost( url, querystring.stringify(data), options );
  110.     };  
  111. })();
Advertisement
Add Comment
Please, Sign In to add comment