ajax.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. var Ajaxs = new Array();
  2. function Ajax(waitId) {
  3. var aj = new Object();
  4. aj.waitId = waitId ? $(waitId) : null;
  5. aj.targetUrl = '';
  6. aj.sendString = '';
  7. aj.resultHandle = null;
  8. aj.loading = '<img src="image/common/loading.gif" style="margin: 3px; vertical-align: middle" />Loading... ';
  9. aj.createXMLHttpRequest = function() {
  10. var request = false;
  11. if(window.XMLHttpRequest) {
  12. request = new XMLHttpRequest();
  13. if(request.overrideMimeType) request.overrideMimeType('text/xml');
  14. } else if(window.ActiveXObject) {
  15. var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
  16. for(var i=0; i<versions.length; i++) {
  17. try {
  18. request = new ActiveXObject(versions[i]);
  19. if(request) return request;
  20. } catch(e) {/*alert(e.message);*/}
  21. }
  22. }
  23. return request;
  24. }
  25. aj.request = aj.createXMLHttpRequest();
  26. if(aj.waitId) {
  27. aj.waitId.orgdisplay = aj.waitId.style.display;
  28. aj.waitId.style.display = '';
  29. aj.waitId.innerHTML = aj.loading;
  30. }
  31. aj.processHandle = function() {
  32. if(aj.request.readyState == 4 && aj.request.status == 200) {
  33. for(k in Ajaxs) {
  34. if(Ajaxs[k] == aj.targetUrl) Ajaxs[k] = null;
  35. }
  36. if(aj.waitId) {
  37. aj.waitId.style.display = 'none';
  38. aj.waitId.style.display = aj.waitId.orgdisplay;
  39. }
  40. aj.resultHandle(aj.request.responseXML.lastChild.firstChild.nodeValue);
  41. }
  42. }
  43. aj.get = function(targetUrl, resultHandle) {
  44. if(in_array(targetUrl, Ajaxs)) {
  45. return false;
  46. } else {
  47. Ajaxs.push(targetUrl);
  48. }
  49. aj.targetUrl = targetUrl;
  50. aj.request.onreadystatechange = aj.processHandle;
  51. aj.resultHandle = resultHandle;
  52. if(window.XMLHttpRequest) {
  53. aj.request.open('GET', aj.targetUrl);
  54. aj.request.send(null);
  55. } else {
  56. aj.request.open("GET", targetUrl, true);
  57. aj.request.send();
  58. }
  59. }
  60. return aj;
  61. }
  62. function show(id, display) {
  63. if(display == 'auto') {
  64. $(id).style.display = $(id).style.display == '' ? 'none' : '';
  65. } else {
  66. $(id).style.display = display;
  67. }
  68. }
  69. function ajaxget(url, showId, waitId, display, recall) {
  70. e = is_ie ? event : ajaxget.caller.arguments[0];
  71. ajaxget2(e, url, showId, waitId, display, recall);
  72. _cancelBubble(e);
  73. }
  74. function ajaxget2(e, url, showId, waitId, display, recall) {
  75. target = e ? (is_ie ? e.srcElement : e.target) : null;
  76. display = display ? display : '';
  77. var x = new Ajax(waitId);
  78. x.showId = showId;
  79. x.display = display;
  80. var sep = url.indexOf('?') != -1 ? '&' : '?';
  81. x.target = target;
  82. x.recall = recall;
  83. x.get(url+sep+'inajax=1', function(s) {
  84. if(x.display == 'auto' && x.target) {
  85. x.target.onclick = newfunc('show', x.showId, 'auto');
  86. }
  87. show(x.showId, x.display);
  88. $(x.showId).innerHTML = s;
  89. evalscript(s);
  90. if(x.recall)eval(x.recall);
  91. });
  92. _cancelBubble(e);
  93. }
  94. var evalscripts = new Array();
  95. function evalscript(s) {
  96. if(!s || s.indexOf('<script') == -1) return s;
  97. var p = /<script[^\>]*?src=\"([^\x00]+?)\"[^\>]*( reload=\"1\")?><\/script>/ig;
  98. var arr = new Array();
  99. while(arr = p.exec(s)) appendscript(arr[1], '', arr[2]);
  100. p = /<script[^\>]*?( reload=\"1\")?>([^\x00]+?)<\/script>/ig;
  101. while(arr = p.exec(s)) appendscript('', arr[2], arr[1]);
  102. return s;
  103. }
  104. function appendscript(src, text, reload) {
  105. var id = hash(src + text);
  106. if(!reload && in_array(id, evalscripts)) return;
  107. if(reload && $(id)) {
  108. $(id).parentNode.removeChild($(id));
  109. }
  110. evalscripts.push(id);
  111. var scriptNode = document.createElement("script");
  112. scriptNode.type = "text/javascript";
  113. scriptNode.id = id;
  114. if(src) {
  115. scriptNode.src = src;
  116. } else if(text){
  117. scriptNode.text = text;
  118. }
  119. $('append').appendChild(scriptNode);
  120. }
  121. function hash(string, length) {
  122. var length = length ? length : 32;
  123. var start = 0;
  124. var i = 0;
  125. var result = '';
  126. filllen = length - string.length % length;
  127. for(i = 0; i < filllen; i++){
  128. string += "0";
  129. }
  130. while(start < string.length) {
  131. result = stringxor(result, string.substr(start, length));
  132. start += length;
  133. }
  134. return result;
  135. }
  136. function stringxor(s1, s2) {
  137. var s = '';
  138. var hash = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  139. var max = Math.max(s1.length, s2.length);
  140. for(var i=0; i<max; i++) {
  141. var k = s1.charCodeAt(i) ^ s2.charCodeAt(i);
  142. s += hash.charAt(k % 52);
  143. }
  144. return s;
  145. }
  146. function in_array(needle, haystack) {
  147. for(var i in haystack) {if(haystack[i] == needle) return true;}
  148. return false;
  149. }
  150. function newfunc(func){
  151. var args = new Array();
  152. for(var i=1; i<arguments.length; i++) args.push(arguments[i]);
  153. return function(e){
  154. window[func].apply(window, args);
  155. _cancelBubble(is_ie ? event : e);
  156. }
  157. }
  158. function ajaxmenu(url, position) {
  159. e = is_ie ? event : ajaxmenu.caller.arguments[0];
  160. controlid = is_ie ? e.srcElement : e.target;
  161. var menuid = hash(url);
  162. createmenu(menuid);
  163. showmenu2(e, menuid, position, controlid);
  164. if(!$(menuid).innerHTML) {
  165. ajaxget2(e, url, menuid, menuid, '', "setposition('" + menuid + "', '" + position + "', '" + controlid + "')");
  166. } else {
  167. }
  168. _cancelBubble(e);
  169. }
  170. var ajaxpostHandle = null;
  171. function ajaxpost(formid, showid, recall) {
  172. var ajaxframeid = 'ajaxframe';
  173. var ajaxframe = $(ajaxframeid);
  174. if(ajaxframe == null) {
  175. if (is_ie) {
  176. ajaxframe = document.createElement("<iframe name='" + ajaxframeid + "' id='" + ajaxframeid + "'></iframe>");
  177. } else {
  178. ajaxframe = document.createElement("iframe");
  179. ajaxframe.name = ajaxframeid;
  180. ajaxframe.id = ajaxframeid;
  181. }
  182. ajaxframe.style.display = 'none';
  183. $('append').appendChild(ajaxframe);
  184. }
  185. $(formid).target = ajaxframeid;
  186. ajaxpostHandle = [formid, showid, ajaxframeid, recall];
  187. _attachEvent(ajaxframe, 'load', ajaxpost_load);
  188. $(formid).submit();
  189. return false;
  190. }
  191. function ajaxpost_load() {
  192. var s = (is_ie && $(ajaxpostHandle[2])) ? $(ajaxpostHandle[2]).contentWindow.document.XMLDocument.text : $(ajaxpostHandle[2]).contentWindow.document.documentElement.firstChild.nodeValue;
  193. evalscript(s);
  194. if(s) {
  195. $(ajaxpostHandle[1]).innerHTML = s;
  196. if(ajaxpostHandle[3]) {
  197. eval(ajaxpostHandle[3]);
  198. }
  199. }
  200. }