XhrIframeProxy.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:5k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.io.XhrIframeProxy");
  9. dojo.require("dojo.experimental");
  10. dojo.experimental("dojo.io.XhrIframeProxy");
  11. dojo.require("dojo.io.IframeIO");
  12. dojo.require("dojo.dom");
  13. dojo.require("dojo.uri.Uri");
  14. dojo.io.XhrIframeProxy = {xipClientUrl:djConfig["xipClientUrl"] || dojo.uri.moduleUri("dojo.io", "xip_client.html"), _state:{}, _stateIdCounter:0, needFrameRecursion:function () {
  15. return (true == dojo.render.html.ie70);
  16. }, send:function (facade) {
  17. var stateId = "XhrIframeProxy" + (this._stateIdCounter++);
  18. facade._stateId = stateId;
  19. var frameUrl = this.xipClientUrl + "#0:init:id=" + stateId + "&server=" + encodeURIComponent(facade._ifpServerUrl) + "&fr=false";
  20. if (this.needFrameRecursion()) {
  21. var fullClientUrl = window.location.href;
  22. if ((this.xipClientUrl + "").charAt(0) == "/") {
  23. var endIndex = fullClientUrl.indexOf("://");
  24. endIndex = fullClientUrl.indexOf("/", endIndex + 1);
  25. fullClientUrl = fullClientUrl.substring(0, endIndex);
  26. } else {
  27. fullClientUrl = fullClientUrl.substring(0, fullClientUrl.lastIndexOf("/") + 1);
  28. }
  29. fullClientUrl += this.xipClientUrl;
  30. var serverUrl = facade._ifpServerUrl + (facade._ifpServerUrl.indexOf("?") == -1 ? "?" : "&") + "dojo.fr=1";
  31. frameUrl = serverUrl + "#0:init:id=" + stateId + "&client=" + encodeURIComponent(fullClientUrl) + "&fr=" + this.needFrameRecursion();
  32. }
  33. this._state[stateId] = {facade:facade, stateId:stateId, clientFrame:dojo.io.createIFrame(stateId, "", frameUrl)};
  34. return stateId;
  35. }, receive:function (stateId, urlEncodedData) {
  36. var response = {};
  37. var nvPairs = urlEncodedData.split("&");
  38. for (var i = 0; i < nvPairs.length; i++) {
  39. if (nvPairs[i]) {
  40. var nameValue = nvPairs[i].split("=");
  41. response[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
  42. }
  43. }
  44. var state = this._state[stateId];
  45. var facade = state.facade;
  46. facade._setResponseHeaders(response.responseHeaders);
  47. if (response.status == 0 || response.status) {
  48. facade.status = parseInt(response.status, 10);
  49. }
  50. if (response.statusText) {
  51. facade.statusText = response.statusText;
  52. }
  53. if (response.responseText) {
  54. facade.responseText = response.responseText;
  55. var contentType = facade.getResponseHeader("Content-Type");
  56. if (contentType && (contentType == "application/xml" || contentType == "text/xml")) {
  57. facade.responseXML = dojo.dom.createDocumentFromText(response.responseText, contentType);
  58. }
  59. }
  60. facade.readyState = 4;
  61. this.destroyState(stateId);
  62. }, clientFrameLoaded:function (stateId) {
  63. var state = this._state[stateId];
  64. var facade = state.facade;
  65. if (this.needFrameRecursion()) {
  66. var clientWindow = window.open("", state.stateId + "_clientEndPoint");
  67. } else {
  68. var clientWindow = state.clientFrame.contentWindow;
  69. }
  70. var reqHeaders = [];
  71. for (var param in facade._requestHeaders) {
  72. reqHeaders.push(param + ": " + facade._requestHeaders[param]);
  73. }
  74. var requestData = {uri:facade._uri};
  75. if (reqHeaders.length > 0) {
  76. requestData.requestHeaders = reqHeaders.join("rn");
  77. }
  78. if (facade._method) {
  79. requestData.method = facade._method;
  80. }
  81. if (facade._bodyData) {
  82. requestData.data = facade._bodyData;
  83. }
  84. clientWindow.send(dojo.io.argsFromMap(requestData, "utf8"));
  85. }, destroyState:function (stateId) {
  86. var state = this._state[stateId];
  87. if (state) {
  88. delete this._state[stateId];
  89. var parentNode = state.clientFrame.parentNode;
  90. parentNode.removeChild(state.clientFrame);
  91. state.clientFrame = null;
  92. state = null;
  93. }
  94. }, createFacade:function () {
  95. if (arguments && arguments[0] && arguments[0]["iframeProxyUrl"]) {
  96. return new dojo.io.XhrIframeFacade(arguments[0]["iframeProxyUrl"]);
  97. } else {
  98. return dojo.io.XhrIframeProxy.oldGetXmlhttpObject.apply(dojo.hostenv, arguments);
  99. }
  100. }};
  101. dojo.io.XhrIframeProxy.oldGetXmlhttpObject = dojo.hostenv.getXmlhttpObject;
  102. dojo.hostenv.getXmlhttpObject = dojo.io.XhrIframeProxy.createFacade;
  103. dojo.io.XhrIframeFacade = function (ifpServerUrl) {
  104. this._requestHeaders = {};
  105. this._allResponseHeaders = null;
  106. this._responseHeaders = {};
  107. this._method = null;
  108. this._uri = null;
  109. this._bodyData = null;
  110. this.responseText = null;
  111. this.responseXML = null;
  112. this.status = null;
  113. this.statusText = null;
  114. this.readyState = 0;
  115. this._ifpServerUrl = ifpServerUrl;
  116. this._stateId = null;
  117. };
  118. dojo.lang.extend(dojo.io.XhrIframeFacade, {open:function (method, uri) {
  119. this._method = method;
  120. this._uri = uri;
  121. this.readyState = 1;
  122. }, setRequestHeader:function (header, value) {
  123. this._requestHeaders[header] = value;
  124. }, send:function (stringData) {
  125. this._bodyData = stringData;
  126. this._stateId = dojo.io.XhrIframeProxy.send(this);
  127. this.readyState = 2;
  128. }, abort:function () {
  129. dojo.io.XhrIframeProxy.destroyState(this._stateId);
  130. }, getAllResponseHeaders:function () {
  131. return this._allResponseHeaders;
  132. }, getResponseHeader:function (header) {
  133. return this._responseHeaders[header];
  134. }, _setResponseHeaders:function (allHeaders) {
  135. if (allHeaders) {
  136. this._allResponseHeaders = allHeaders;
  137. allHeaders = allHeaders.replace(/r/g, "");
  138. var nvPairs = allHeaders.split("n");
  139. for (var i = 0; i < nvPairs.length; i++) {
  140. if (nvPairs[i]) {
  141. var nameValue = nvPairs[i].split(": ");
  142. this._responseHeaders[nameValue[0]] = nameValue[1];
  143. }
  144. }
  145. }
  146. }});