xmlcallback.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. function getDomDocumentPrefix() {
  2. if (getDomDocumentPrefix.prefix)
  3. return getDomDocumentPrefix.prefix;
  4. var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
  5. var o;
  6. for (var i = 0; i < prefixes.length; i++) {
  7. try {
  8. // try to create the objects
  9. o = new ActiveXObject(prefixes[i] + ".DomDocument");
  10. return getDomDocumentPrefix.prefix = prefixes[i];
  11. }
  12. catch (ex) {};
  13. }
  14. throw new Error("Could not find an installed XML parser");
  15. }
  16. function getXmlHttpPrefix() {
  17. if (getXmlHttpPrefix.prefix)
  18. return getXmlHttpPrefix.prefix;
  19. var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
  20. var o;
  21. for (var i = 0; i < prefixes.length; i++) {
  22. try {
  23. // try to create the objects
  24. o = new ActiveXObject(prefixes[i] + ".XmlHttp");
  25. return getXmlHttpPrefix.prefix = prefixes[i];
  26. }
  27. catch (ex) {};
  28. }
  29. throw new Error("Could not find an installed XMLHttp object");
  30. }
  31. function XmlHttp() {}
  32. XmlHttp.create = function () {
  33. try {
  34. // NS & MOZ
  35. if (window.XMLHttpRequest) {
  36. var req = new XMLHttpRequest();
  37. // some versions of Moz do not support the readyState property
  38. // and the onreadystate event so we patch it!
  39. if (req.readyState == null) {
  40. req.readyState = 1;
  41. req.addEventListener("load", function () {
  42. req.readyState = 4;
  43. if (typeof req.onreadystatechange == "function")
  44. req.onreadystatechange();
  45. }, false);
  46. }
  47. return req;
  48. }
  49. // IE
  50. if (window.ActiveXObject) {
  51. return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
  52. }
  53. }
  54. catch (ex) {}
  55. // Fail
  56. throw new Error("Your browser does not support XmlHttp objects");
  57. };
  58. function XmlDocument() {}
  59. XmlDocument.create = function () {
  60. try {
  61. if (document.implementation && document.implementation.createDocument) {
  62. var doc = document.implementation.createDocument("", "", null);
  63. if (doc.readyState == null) {
  64. doc.readyState = 1;
  65. doc.addEventListener("load", function () {
  66. doc.readyState = 4;
  67. if (typeof doc.onreadystatechange == "function")
  68. doc.onreadystatechange();
  69. }, false);
  70. }
  71. return doc;
  72. }
  73. if (window.ActiveXObject)
  74. return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument");
  75. }
  76. catch (ex) {}
  77. throw new Error("Your browser does not support XmlDocument objects");
  78. };
  79. if (window.DOMParser &&
  80. window.XMLSerializer &&
  81. window.Node && Node.prototype && Node.prototype.__defineGetter__) {
  82. Document.prototype.loadXML = function (s) {
  83. var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
  84. while (this.hasChildNodes())
  85. this.removeChild(this.lastChild);
  86. for (var i = 0; i < doc2.childNodes.length; i++) {
  87. this.appendChild(this.importNode(doc2.childNodes[i], true));
  88. }
  89. };
  90. Document.prototype.__defineGetter__("xml", function () {
  91. return (new XMLSerializer()).serializeToString(this);
  92. });
  93. }
  94. /*
  95. * xmlHttp Pool
  96. *
  97. * userage: var xmlhttpObj = XmlHttpPool.pick()
  98. */
  99. var XmlHttpPoolArr = new Array();
  100. var XmlHttpPoolSize = 100;
  101. var XHPCurrentAvailableID = 0;
  102. function XmlHttpPool() {}
  103. XmlHttpPool.pick = function() {
  104. var pos = XHPCurrentAvailableID;
  105. XmlHttpPoolArr[pos] = XmlHttp.create();
  106. XHPCurrentAvailableID >= (XmlHttpPoolSize-1) ? 0 : XHPCurrentAvailableID++
  107. return XmlHttpPoolArr[pos];
  108. }
  109. function rpcCall(url, method, data, callback, asyn) {
  110. var xmlhttp = XmlHttp.create();
  111. xmlhttp.open(method, url, asyn);
  112. xmlhttp.send(data);
  113. if (!asyn) { // if not asyn
  114. callback(xmlhttp.responseText);
  115. } else {
  116. xmlhttp.onreadystatechange = function() {
  117. if (xmlhttp.readyState == 4) {
  118. callback(xmlhttp.responseText);
  119. }
  120. }
  121. }
  122. }