1 /** 2 * Ajax 3 * 4 * Module for making ajax requests 5 */ 6 (function (){ 7 8 "use strict"; 9 10 // Don't bother even defining the object if the XMLHttpRequest isn't available 11 if(typeof window.XMLHttpRequest === "undefined") 12 { 13 return; 14 } 15 16 var ajax = { 17 _do: function (url, data, success_callback, error_callback, isPost) 18 { 19 var type, 20 request = new XMLHttpRequest(); 21 22 if (typeof success_callback === "undefined") 23 { 24 /** 25 * @private 26 */ 27 success_callback = function (){}; 28 } 29 30 type = (isPost) ? "POST" : "GET"; 31 32 url += (type === "GET") ? "?" + this._serialize(data) : ''; 33 34 request.open(type, url); 35 36 request.onreadystatechange = function () 37 { 38 if (request.readyState === 4) 39 { 40 if (request.status === 200) 41 { 42 success_callback.call(request.responseText, request.responseText); 43 } 44 else 45 { 46 if (typeof error_callback !== 'undefined') 47 { 48 error_callback.call(request.status, request.status); 49 } 50 } 51 52 } 53 }; 54 55 if (type === "POST") 56 { 57 request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 58 request.send(this._serialize(data)); 59 } 60 else 61 { 62 request.send(null); 63 } 64 }, 65 _serialize: function (data) 66 { 67 var name, 68 value, 69 pairs = []; 70 71 for (name in data) 72 { 73 if (!data.hasOwnProperty(name)) 74 { 75 continue; 76 } 77 if (typeof data[name] === "function") 78 { 79 continue; 80 } 81 82 value = data[name].toString(); 83 84 name = encodeURIComponent(name); 85 value = encodeURIComponent(value); 86 87 pairs.push(name + "=" + value); 88 } 89 90 return pairs.join("&"); 91 } 92 }; 93 94 /** 95 * Sends a GET type ajax request 96 * 97 * @name get 98 * @function 99 * @memberOf $_ 100 * @param string url 101 * @param object data 102 * @param function success_callback 103 * @param function error_callback 104 */ 105 $_.ext('get', function (url, data, success_callback, error_callback){ 106 ajax._do(url, data, success_callback, error_callback, false); 107 }); 108 109 /** 110 * Sends a POST type ajax request 111 * 112 * @name post 113 * @function 114 * @memberOf $_ 115 * @param string url 116 * @param object data 117 * @param function success_callback 118 * @param function error_callback 119 */ 120 $_.ext('post', function (url, data, success_callback, error_callback){ 121 ajax._do(url, data, success_callback, error_callback, true); 122 }); 123 124 /** 125 * Watches for server-sent events and applies a callback on message 126 * 127 * @name sse 128 * @function 129 * @memberOf $_ 130 * @param string url 131 * @param function callback 132 */ 133 $_.ext('sse', function(url, callback){ 134 135 var source; 136 137 // Check for server-sent event support 138 if (typeof EventSource !== 'undefined') 139 { 140 source = new EventSource(url); 141 142 // Apply the callback 143 source.onmessage = function(event){ 144 callback.call(event.data, event.data); 145 }; 146 } 147 }); 148 149 }());