当前位置: 代码迷 >> JavaScript >> 【转】用js创设XMLHttpRequest对象池
  详细解决方案

【转】用js创设XMLHttpRequest对象池

热度:129   发布时间:2012-10-07 17:28:51.0
【转】用js创建XMLHttpRequest对象池
  1. //使用literal语法定义一个对象:XMLHttp ??
  2. var?XMLHttp?=? ??
  3. { ??
  4. ????//定义第一个属性,该属性用于缓存XMLHttpRequest对象的数组 ??
  5. ????XMLHttpRequestPool:?[], ??
  6. ????//对象的第一个方法,该方法用于返回一个XMLHttpRequest对象 ??
  7. ????getInstance:function() ??
  8. ????{ ??
  9. ????????//?从XMLHttpRequest对象池中取出一个空闲的XMLHttpRequest ??
  10. ????????for?(var?i?=?0;?i?<?this.XMLHttpRequestPool.length;?i?++) ??
  11. ????????{ ??
  12. ????????????//如果XMLHttpReuqest的readyState为0,或者为4, ??
  13. ????????????//都表示当前的XMLHttpRequest对象为闲置的对象 ??
  14. ????????????if?(this.XMLHttpRequestPool[i].readyState?==?0?||? ??
  15. ????????????????this.XMLHttpRequestPool[i].readyState?==?4) ??
  16. ????????????{ ??
  17. ????????????????return?this.XMLHttpRequestPool[i]; ??
  18. ????????????} ??
  19. ????????} ??
  20. ????????//如果没有空闲的,将再次创建一个新的XMLHttpRequest对象 ??
  21. ????????this.XMLHttpRequestPool[this.XMLHttpRequestPool.length]? ??
  22. ????????????=?this.createXMLHttpRequest(); ??
  23. ????????//返回刚刚创建的XMLHttpRequest对象 ??
  24. ????????return?this.XMLHttpRequestPool[this.XMLHttpRequestPool.length?-?1]; ??
  25. ????}, ??
  26. ????//创建新的XMLHttpRequest对象 ??
  27. ????createXMLHttpRequest:function() ??
  28. ????{ ??
  29. ????????//对于DOM?2?规范的浏览器 ??
  30. ????????if?(window.XMLHttpRequest) ??
  31. ????????{ ??
  32. ????????????var?objXMLHttp?=?new?XMLHttpRequest(); ??
  33. ????????} ??
  34. ????????//对于Internet?Explorer浏览器 ??
  35. ????????else??
  36. ????????{ ??
  37. ????????????//将Internet?Explorer内置的所有XMLHTTP?ActiveX控制设置成数组 ??
  38. ????????????var?MSXML?=?['MSXML2.XMLHTTP.5.0',?'MSXML2.XMLHTTP.4.0',? ??
  39. ????????????????'MSXML2.XMLHTTP.3.0',?'MSXML2.XMLHTTP',?'Microsoft.XMLHTTP']; ??
  40. ????????????//依次对Internet?Explorer内置的XMLHTTP控件初始化,尝试创建XMLHttpRequest对象 ??
  41. ????????????for(var?n?=?0;?n?<?MSXML.length;?n?++) ??
  42. ????????????{ ??
  43. ????????????????try??
  44. ????????????????{ ??
  45. ????????????????????//如果可以正常创建XMLHttpRequest对象,使用break跳出循环 ??
  46. ????????????????????var?objXMLHttp?=?new?ActiveXObject(MSXML[n]);? ??
  47. ????????????????????break; ??
  48. ????????????????} ??
  49. ????????????????catch(e) ??
  50. ????????????????{ ??
  51. ????????????????} ??
  52. ????????????} ??
  53. ????????} ??
  54. ????????//Mozilla某些版本没有readyState属性 ??
  55. ????????if?(objXMLHttp.readyState?==?null) ??
  56. ????????{ ??
  57. ????????????//直接设置其readyState为0 ??
  58. ????????????objXMLHttp.readyState?=?0; ??
  59. ????????????//对于哪些没有readyState属性的浏览器,将load动作与下面的函数关联起来 ??
  60. ????????????objXMLHttp.addEventListener("load",?function?() ??
  61. ????????????{ ??
  62. ????????????????//当从服务器加载数据完成后,将readyState状态设为4 ??
  63. ????????????????objXMLHttp.readyState?=?4; ??
  64. ????????????????if?(typeof?objXMLHttp.onreadystatechange?==?"function") ??
  65. ????????????????{ ??
  66. ????????????????????objXMLHttp.onreadystatechange(); ??
  67. ????????????????} ??
  68. ????????????},?false); ??
  69. ????????} ??
  70. ????????return?objXMLHttp; ??
  71. ????}, ??
  72. ????//定义对象的第三个方法:?发送请求(方法[POST,GET],?地址,?数据,?回调函数) ??
  73. ????sendRequest:?function?(method,?url,?data,?callback) ??
  74. ????{ ??
  75. ????????var?objXMLHttp?=?this.getInstance(); ??
  76. ????????with(objXMLHttp) ??
  77. ????????{ ??
  78. ????????????try??
  79. ????????????{ ??
  80. ????????????????//增加一个额外的randnum请求参数,用于防止IE缓存服务器响应 ??
  81. ????????????????if?(url.indexOf("?")?>?0) ??
  82. ????????????????{ ??
  83. ????????????????????url?+=?"&randnum="?+?Math.random(); ??
  84. ????????????????} ??
  85. ????????????????else??
  86. ????????????????{ ??
  87. ????????????????????url?+=?"?randnum="?+?Math.random(); ??
  88. ????????????????} ??
  89. ????????????????//打开与服务器的连接 ??
  90. ????????????????open(method,?url,?true); ??
  91. ????????????????//对于使用POST请求方式 ??
  92. ????????????????if?(method?==?"POST") ??
  93. ????????????????{ ??
  94. ????????????????????//?设定请求头 ??
  95. ????????????????????setRequestHeader('Content-Type',? ??
  96. ????????????????????????'application/x-www-form-urlencoded'); ??
  97. ????????????????????send(data); ??
  98. ????????????????} ??
  99. ????????????????//对于采用GET请求 ??
  100. ????????????????if?(method?==?"GET") ??
  101. ????????????????{ ??
  102. ????????????????????send(null); ??
  103. ????????????????} ??
  104. ????????????????//设置状态改变的回调函数 ??
  105. ????????????????onreadystatechange?=?function?() ??
  106. ????????????????{ ??
  107. ????????????????????//当服务器的相应完成时,以及获得了正常的服务器响应 ??
  108. ????????????????????if?(objXMLHttp.readyState?==?4?&& ??
  109. ????????????????????????(objXMLHttp.status?==?200?||? ??
  110. ????????????????????????????objXMLHttp.status?==?304)) ??
  111. ????????????????????{ ??
  112. ????????????????????????//当响应时机成熟时,调用回调函数处理响应 ??
  113. ????????????????????????callback(objXMLHttp); ??
  114. ????????????????????} ??
  115. ????????????????} ??
  116. ????????????} ??
  117. ????????????catch(e) ??
  118. ????????????{ ??
  119. ????????????????alert(e); ??
  120. ????????????} ??
  121. ????????} ??
  122. ????} ??
  123. };?

原文地址:http://justsee.iteye.com/blog/690353

  相关解决方案