Bryan

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            37 Posts :: 3 Stories :: 24 Comments :: 0 Trackbacks
          /*

          Cross-Browser XMLHttpRequest v1.1
          =================================

          Emulate Gecko 'XMLHttpRequest()' functionality in IE and Opera. Opera requires
          the Sun Java Runtime Environment <http://www.java.com/>.

          by Andrew Gregory
          http://www.scss.com.au/family/andrew/webdesign/xmlhttprequest/

          This work is licensed under the Creative Commons Attribution License. To view a
          copy of this license, visit http://creativecommons.org/licenses/by/1.0/ or send
          a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305,
          USA.

          Not Supported in Opera
          ----------------------
          * user/password authentication
          * responseXML data member

          Not Fully Supported in Opera
          ----------------------------
          * async requests
          * abort()
          * getAllResponseHeaders(), getAllResponseHeader(header)

          */

          // IE support
          if (window.ActiveXObject && !window.XMLHttpRequest) {
            window.XMLHttpRequest 
          = function() {
              
          return new ActiveXObject((navigator.userAgent.toLowerCase().indexOf('msie 5') != -1? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP');
            }
          ;
          }

          // Gecko support
          /* ;-) */
          // Opera support
          global_fakeOperaXMLHttpRequestSupport = false;
          //if (window.opera && !window.XMLHttpRequest) { THIS IS COMMENTED OUT BECAUSE OPERA 8 has window.XMLHttpRequest but still does not support setRequestHeader
          if (window.opera) {
              global_fakeOperaXMLHttpRequestSupport 
          = true;
            window.XMLHttpRequest 
          = function() {
              
          this.readyState = 0// 0=uninitialized,1=loading,2=loaded,3=interactive,4=complete
              this.status = 0// HTTP status codes
              this.statusText = '';
              
          this._headers = [];
              
          this._aborted = false;
              
          this._async = true;
              
          this.abort = function() {
                
          this._aborted = true;
              }
          ;
              
          this.getAllResponseHeaders = function() {
                
          return this.getAllResponseHeader('*');
              }
          ;
              
          this.getAllResponseHeader = function(header) {
                
          var ret = '';
                
          for (var i = 0; i < this._headers.length; i++{
                  
          if (header == '*|| this._headers[i].h == header) {
                    ret 
          += this._headers[i].h + ': ' + this._headers[i].v + '\n';
                  }

                }

                
          return ret;
              }
          ;
              
          this.setRequestHeader = function(header, value) {
                
          this._headers[this._headers.length] = {h:header, v:value};
              }
          ;
              
          this.open = function(method, url, async, user, password) {
                  
                  
          //alert(method+"]["+url+"]["+async+"]["+user+""+""+"");
                this.method = method;
                
          this.url = url;
                
          this._async = true;
                
          this._aborted = false;
                
          if (arguments.length >= 3{
                  
          this._async = async;
                }

                
          if (arguments.length > 3{
                  
          // user/password support requires a custom Authenticator class
                  opera.postError('XMLHttpRequest.open() - user/password not supported');
                }

                
          this._headers = [];
                
          this.readyState = 1;
                
          if (this.onreadystatechange) {
                  
          this.onreadystatechange();
                }

              }
          ;
              
          this.send = function(data) {
                
          if (!navigator.javaEnabled()) {
                  alert(
          "XMLHttpRequest.send() - Java must be installed and enabled.");
                  
          return;
                }

                
          if (this._async) {
                  setTimeout(
          this._sendasync, 0this, data);
                  
          // this is not really asynchronous and won't execute until the current
                  // execution context ends
                }
           else {
                  
          this._sendsync(data);
                }

              }

              
          this._sendasync = function(req, data) {
                
          if (!req._aborted) {
                  req._sendsync(data);
                }

              }
          ;
              
          this._sendsync = function(data) {
                
          this.readyState = 2;
                
          if (this.onreadystatechange) {
                  
          this.onreadystatechange();
                }

                
          // open connection
                var url = new java.net.URL(new java.net.URL(window.location.href), this.url);
                
          var conn = url.openConnection();
                
          for (var i = 0; i < this._headers.length; i++{
                  conn.setRequestProperty(
          this._headers[i].h, this._headers[i].v);
                }

                
          this._headers = [];
                
          if (this.method == 'POST') {
                  
          // POST data
                  conn.setDoOutput(true);
                  
          var wr = new java.io.OutputStreamWriter(conn.getOutputStream());
                  wr.write(data);
                  wr.flush();
                  wr.close();
                }

                
          // read response headers
                // NOTE: the getHeaderField() methods always return nulls for me :(
                var gotContentEncoding = false;
                
          var gotContentLength = false;
                
          var gotContentType = false;
                
          var gotDate = false;
                
          var gotExpiration = false;
                
          var gotLastModified = false;
                
          for (var i = 0; ; i++{
                  
          var hdrName = conn.getHeaderFieldKey(i);
                  
          var hdrValue = conn.getHeaderField(i);
                  
          if (hdrName == null && hdrValue == null{
                    
          break;
                  }

                  
          if (hdrName != null{
                    
          this._headers[this._headers.length] = {h:hdrName, v:hdrValue};
                    
          switch (hdrName.toLowerCase()) {
                      
          case 'content-encoding': gotContentEncoding = truebreak;
                      
          case 'content-length'  : gotContentLength   = truebreak;
                      
          case 'content-type'    : gotContentType     = truebreak;
                      
          case 'date'            : gotDate            = truebreak;
                      
          case 'expires'         : gotExpiration      = truebreak;
                      
          case 'last-modified'   : gotLastModified    = truebreak;
                    }

                  }

                }

                
          // try to fill in any missing header information
                var val;
                val 
          = conn.getContentEncoding();
                
          if (val != null && !gotContentEncoding) this._headers[this._headers.length] = {h:'Content-encoding', v:val};
                val 
          = conn.getContentLength();
                
          if (val != -1 && !gotContentLength) this._headers[this._headers.length] = {h:'Content-length', v:val};
                val 
          = conn.getContentType();
                
          if (val != null && !gotContentType) this._headers[this._headers.length] = {h:'Content-type', v:val};
                val 
          = conn.getDate();
                
          if (val != 0 && !gotDate) this._headers[this._headers.length] = {h:'Date', v:(new Date(val)).toUTCString()};
                val 
          = conn.getExpiration();
                
          if (val != 0 && !gotExpiration) this._headers[this._headers.length] = {h:'Expires', v:(new Date(val)).toUTCString()};
                val 
          = conn.getLastModified();
                
          if (val != 0 && !gotLastModified) this._headers[this._headers.length] = {h:'Last-modified', v:(new Date(val)).toUTCString()};
                
          // read response data
                var reqdata = '';
                
          var stream = conn.getInputStream();
                
          if (stream) {
                  
          var reader = new java.io.BufferedReader(new java.io.InputStreamReader(stream));
                  
          var line;
                  
          while ((line = reader.readLine()) != null{
                    
          if (this.readyState == 2{
                      
          this.readyState = 3;
                      
          if (this.onreadystatechange) {
                        
          this.onreadystatechange();
                      }

                    }

                    reqdata 
          += line + '\n';
                  }

                  reader.close();
                  
          this.status = 200;
                  
          this.statusText = 'OK';
                  
          this.responseText = reqdata;
                  
          this.readyState = 4;
                  
          if (this.onreadystatechange) {
                    
          this.onreadystatechange();
                  }

                  
          if (this.onload) {
                    
          this.onload();
                  }

                }
           else {
                  
          // error
                  this.status = 404;
                  
          this.statusText = 'Not Found';
                  
          this.responseText = '';
                  
          this.readyState = 4;
                  
          if (this.onreadystatechange) {
                    
          this.onreadystatechange();
                  }

                  
          if (this.onerror) {
                    
          this.onerror();
                  }

                }

              }
          ;
            }
          ;
          }

          // ActiveXObject emulation
          if (!window.ActiveXObject && window.XMLHttpRequest) {
            window.ActiveXObject 
          = function(type) {
              
          switch (type.toLowerCase()) {
                
          case 'microsoft.xmlhttp':
                
          case 'msxml2.xmlhttp':
                  
          return new XMLHttpRequest();
              }

              
          return null;
            }
          ;
          }

          posted on 2008-11-08 20:55 Life is no respector of any genius. 閱讀(461) 評論(2)  編輯  收藏 所屬分類: Ajax

          Feedback

          # re: XMLHttpRequest v1.1 2008-11-08 21:12 Life is no respector of any genius.
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          <html xmlns="http://www.w3.org/1999/xhtml">
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
          <title>加載數據</title>
          </head>

          <body id="newskin">
          </body>
          <script language=javascript>
          var div = document.createElement("div");
          div.id="processing";
          div.innerHTML = "<br><center><img src=\"http://blog.hexun.com/img/loading.gif\" alt=\"\" /> <font style=\"color: #063667;font-weight: bold;font-size: 12px;\">正在加載數據,請稍侯...</font></center>";
          div.className="searching";
          div.style.filter = "alpha(Opacity=70)";
          div.style.position = "absolute";
          div.style.top =300;
          div.style.left = 300;
          div.style.zIndex = 101;
          alert(document.body);
          document.body.appendChild(div);
          </script>
          </html>
            回復  更多評論
            

          # re: XMLHttpRequest v1.1 2008-11-15 15:11 Bryan
          JQuery demo

          http://res.nodstrum.com/jQueryPHPContent/index.html  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 始兴县| 开鲁县| 红原县| 古浪县| 土默特左旗| 汝南县| 临猗县| 垫江县| 磴口县| 钟祥市| 南木林县| 信阳市| 兰州市| 淅川县| 民乐县| 通道| 哈尔滨市| 鄱阳县| 湟源县| 泸水县| 固原市| 班戈县| 丰顺县| 鹿邑县| 黑水县| 金堂县| 宁阳县| 巴彦县| 卢龙县| 秦安县| 南漳县| 曲周县| 周口市| 蛟河市| 隆子县| 肥东县| 冷水江市| 报价| 海丰县| 哈密市| 都安|