1 (function(){ 2 3 function addParamToUrl(url, param) { 4 return url + (/\?/.test(url) ? '&' : '?') + param; 5 } 6 7 var makeXHR = (function() { 8 var factories = [ 9 function() { return new ActiveXObject("Microsoft.XMLHTTP"); }, 10 function() { return new ActiveXObject("Msxml2.XMLHTTP"); }, 11 function() { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }, 12 function() { return new XMLHttpRequest(); } 13 ]; 14 for (var i = factories.length; i--; ) { 15 try { 16 var req = factories[i](); 17 if (req) { 18 return factories[i]; 19 } 20 } 21 catch (err) { } 22 } 23 })(); 24 25 function emptyFn() { }; 26 27 function request(url, options) { 28 29 options || (options = { }); 30 31 var method = options.method ? options.method.toUpperCase() : 'GET', 32 onComplete = options.onComplete || function() { }, 33 request = makeXHR(), 34 body; 35 36 /** @ignore */ 37 request.onreadystatechange = function() { 38 if (request.readyState === 4) { 39 onComplete(request); 40 request.onreadystatechange = emptyFn; 41 } 42 }; 43 44 if (method === 'GET') { 45 body = null; 46 if (typeof options.parameters == 'string') { 47 url = addParamToUrl(url, options.parameters); 48 } 49 } 50 51 request.open(method, url, true); 52 53 if (method === 'POST' || method === 'PUT') { 54 request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 55 } 56 57 request.send(body); 58 return request; 59 }; 60 61 fabric.util.request = request; 62 })();