隨筆-6  評論-38  文章-40  trackbacks-0
          AJAX入門必讀與實例(仿google的拖動)

          AJAX全稱為“Asynchronous JavaScript and XML”(異步JavaScript和XML),是指一種創建交互式網頁應用的網頁開發技術。

          主要包含了以下幾種技術:

          Ajax(Asynchronous JavaScript + XML)的定義
          基于web標準(standards-based presentation)XHTML+CSS的表示;
          使用 DOM(Document Object Model)進行動態顯示及交互;
          使用 XML 和 XSLT 進行數據交換及相關操作;
          使用 XMLHttpRequest 進行異步數據查詢、檢索;
          使用 JavaScript 將所有的東西綁定在一起。

          ? 傳統的web應用允許用戶填寫表單(form),當提交表單時就向web服務器發送一個請求。服務器接收并處理傳來的表單,然后返回一個新的網頁。這個做法浪費了許多帶寬,因為在前后兩個頁面中的大部分HTML代碼往往是相同的。由于每次應用的交互都需要向服務器發送請求,應用的響應時間就依賴于服務器的響應時間。這導致了用戶界面的響應比本地應用慢得多。

          ? 與此不同,AJAX應用可以僅向服務器發送并取回必需的數據,它使用SOAP或其它一些基于XML的web service接口,并在客戶端采用JavaScript處理來自服務器的響應。因為在服務器和瀏覽器之間交換的數據大量減少,結果我們就能看到響應更快的應用。同時很多的處理工作可以在發出請求的客戶端機器上完成,所以Web服務器的處理時間也減少了。

          Ajax應用程序的優勢在于:

          1. 通過異步模式,提升了用戶體驗

          2. 優化了瀏覽器和服務器之間的傳輸,減少不必要的數據往返,減少了帶寬占用

          3. Ajax引擎在客戶端運行,承擔了一部分本來由服務器承擔的工作,從而減少了大用戶量下的服務器負載。

          **************************************************************************************************

          xmlhttp的屬性:

          onreadystatechange ? 指定當readyState屬性改變時的事件處理句柄,只寫 。
          readyState ? ? 返回當前請求的狀態,只讀。
          responseBody ? ? 將回應信息正文以unsigned byte數組形式返回,只讀
          responseStream ? ? ? 以Ado Stream對象的形式返回響應信息,只讀 。
          responseText ? ? ? 將響應信息作為字符串返回,只讀 。
          responseXML ? ? ? 將響應信息格式化為Xml Document對象并返回,只讀 。
          status ? ? ? ? 返回當前請求的http狀態碼,只讀 。
          statusText ? ? ? 返回當前請求的響應行狀態,只讀 。

          xmlhttp的方法:
          abort ? ? ? ? 取消當前請求
          getAllResponseHeaders ? 獲取響應的所有http頭
          getResponseHeader ? 從響應信息中獲取指定的http頭
          open ? ? ? ? 創建一個新的http請求,并指定此請求的方法、URL以及驗證信息(用戶名/密碼) //常用
          send ? ? ? ? 發送請求到http服務器并接收回應 //常用
          setRequestHeader ? 單獨指定請求的某個http頭

          語法:
          onreadystatechang 指定當readyState屬性改變時的事件處理句柄,只寫

          xmlHttpObj.onreadystatechange=a;
          function a(){
          ? if(xmlHttpObj.readyState==4){
          ? ? if(xmlHttpObj.stateus==200){
          ? ? ? ? alert(xmlHttpObj.responseText);
          ? ? }else{
          ? ? ? ? alert("加載失敗!\n原因:"+xmlHttpObj.stateText);
          ? ? }
          ? }
          }



          readyState 返回當前請求的狀態,只讀。

          xmlHttpObj.readyState;

          參見函數a;

          readyState,變量。定義如下:
          0 (未初始化) ? ? ? 對象已建立,但是尚未初始化(尚未調用open方法)
          1 (初始化) ? ? ? 對象已建立,尚未調用send方法
          2 (發送數據) ? ? ? send方法已調用,但是當前的狀態及http頭未知
          3 (數據傳送中) ? ? ? 已接收部分數據,因為響應及http頭不全,這時通過responseBody和responseText獲取部分數據會出現錯誤,
          4 (完成) ? ? ? 數據接收完畢,此時可以通過通過responseBody和responseText獲取完整的回應數據



          responseText 將響應信息作為字符串返回,只讀 。

          xmlHttpObj.responseText;

          responseBody ,responseStream ,responseText ,responseXML 與之相似

          responseXML可以返回一個文檔樹(DOM),可以使用document.getElementsByTagName,document.getElementsByTagNameNS,document.getElementById等對其操作



          stateus 返回當前請求的http狀態碼,只讀 。

          xmlHttpObj.stateus;

          參見函數a;

          長整形標準http狀態碼,定義如下:
          值 ? 描述
          100 ? Continue
          101 ? Switching protocols
          200 ? OK
          201 ? Created
          202 ? Accepted
          203 ? Non-Authoritative Information
          204 ? No Content
          205 ? Reset Content
          206 ? Partial Content
          300 ? Multiple Choices
          301 ? Moved Permanently
          302 ? Found
          303 ? See Other
          304 ? Not Modified
          305 ? Use Proxy
          307 ? Temporary Redirect
          400 ? Bad Request
          401 ? Unauthorized
          402 ? Payment Required
          403 ? Forbidden
          404 ? Not Found
          405 ? Method Not Allowed
          406 ? Not Acceptable
          407 ? Proxy Authentication Required
          408 ? Request Timeout
          409 ? Conflict
          410 ? Gone
          411 ? Length Required
          412 ? Precondition Failed
          413 ? Request Entity Too Large
          414 ? Request-URI Too Long
          415 ? Unsupported Media Type
          416 ? Requested Range Not Suitable
          417 ? Expectation Failed
          500 ? Internal Server Error
          501 ? Not Implemented
          502 ? Bad Gateway
          503 ? Service Unavailable
          504 ? Gateway Timeout
          505 ? HTTP Version Not Supported


          statusText 返回當前請求的響應行狀態

          xmlHttpObj.stateText;

          參考函數a;


          open 創建一個新的http請求,并指定此請求的方法、URL以及驗證信息

          xmlHttpObj.open(Method,URL[,Async][,User][,PassWord]);
          []表示可選

          參數:
          Method:POST|GET(大小寫不敏感)
          URL:請求的URL地址,可以為絕對地址也可以為相對地址。
          Async:[true|fase] 是否同步,默認為true。
          User:如果服務器需要驗證,此處指定用戶名,如果未指定,當服務器需要驗證時,則會彈出驗證窗口。
          Password:驗證信息中的密碼部分,如果用戶名為空,則此值將被忽略。

          send 發送請求到http服務器并接收回應

          xmlHttpObj.send([Text]);

          參數:
          Text:要發送的數據,默認為空(null);

          ************************************************************************************************************
          一個例子:


          創建一個xmlhttp對象:現在的絕對多數瀏覽器都增加了對XmlHttp的支持,IE中使用ActiveXObject方式創建XmlHttp對象,其他瀏覽器如:Firefox、Opera、NetScape等通過window.XMLHttpRequest來創建xmlhttp對象。
          var xmlhttp;
          function new_xmlHttp(){
          ? var a=null;
          ? if(window.ActiveXObject){//IE(此處的IE泛指所有用IE內核的瀏覽器,下同)
          ? ? a=new ActiveXObject("Msxml2.XMLHTTP");
          ? ? if(!a){
          ? ? ? ? a=new ActiveXObject("Microsoft.XMLHTTP")
          ? ? }
          ? }else if(window.XMLHttpRequest){//Mozilla(FireFox,NS)
          ? ? a=new XMLHttpRequest()
          ? }
          ? return a;
          }
          xmlhttp=new_xmlhttp();
          xmlhttp.open("GET","http://localhost/xmlfile.xml",false);//創建一個新的HTTP請求,并指定URL
          xmlhttp.send();//發送
          xmlhttp.onreadystatechange=function(){
          ? if(xmlhttp.readyState==4){
          ? ? if(xmlhttp.stateus==200){
          ? ? ? ? alert(xmlhttp.responseText);
          ? ? }else{
          ? ? ? ? alert("加載失?。n原因:"+xmlhttp.stateText);
          ? ? }
          ? }
          }


          一個簡單完整的XMLHTTP例子:
          將以下代碼保存為本地HTML文件再使用
          CODE:
          <!--begin-->
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
          "[url]http://www.w3.org/TR/html4/loose.dtd[/url]">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
          <title>一個簡單的XMLHTTP例子</title>
          </head>

          <body>
          <script>
          var oDiv
          var xh
          function getXML()
          {
          oDiv = document.all.m
          oDiv.innerHTML = "正在裝載欄目數據,請稍侯......."
          oDiv.style.display= ""
          xh = new ActiveXObject("Microsoft.XMLHTTP")
          xh.onreadystatechange = getReady
          xh.open("GET",a.value,true)
          xh.send()

          }

          function getReady()
          {
          if(xh.readyState==4)
          {
          if(xh.status==200)
          {

          ? oDiv.innerHTML = "完成"
          }
          else
          {
          ? oDiv.innerHTML = "抱歉,裝載數據失敗。原因:" + xh.statusText
          }
          }
          }
          </script>
          <body>
          xmlhttp異步的例子:
          URL:<input name=a value="[url]http://s041149.stu.cdut.edu.cn/xml/myxmltest.xml[/url]" style="width:600px">
          <input onclick="getXML()" type="button" value="得到源代碼">
          <input onclick="if(xh && xh.responseText) {alert(xh.responseText);oDiv.innerHTML=xh.responseText}" type="button" value="顯示源代碼">
          <div id=m></div>

          </body>
          </html>

          <!--end-->
          [Copy to clipboard]


          例子:
          仿GOOGLE個性化主頁的拖動并保存定位,http://s041149.stu.cdut.edu.cn/xml/myxmltest.xml為保存相對位置的XML文件,請注意拖動前后的變化
          http://s041149.stu.cdut.edu.cn/xml/(細節問題可E-MAIL:hktx[at]163[dot]com)
          posted on 2006-12-01 21:18 一手的小窩窩 閱讀(491) 評論(0)  編輯  收藏 所屬分類: JAVASCRIPT
          主站蜘蛛池模板: 若尔盖县| 韶山市| 松潘县| 涡阳县| 三都| 承德县| 夏河县| 建水县| 绥棱县| 革吉县| 上饶市| 环江| 溧水县| 梁山县| 鹿邑县| 称多县| 六枝特区| 武安市| 温宿县| 密山市| 开原市| 抚松县| 东乌| 海兴县| 岐山县| 合水县| 旺苍县| 丰都县| 黑龙江省| 武陟县| 辽阳市| 临夏市| 滨海县| 灵台县| 夏津县| 疏附县| 微博| 濉溪县| 延津县| 祥云县| 湟源县|