ajax
Ajax
Ajax,非同步JavaScript與XML,是使用用戶端指令碼與Web伺服器交換資料的Web應用開發方法。這樣,Web頁面不用打斷互動流程進行重新加裁,就可以動態地更新。
使用Ajax,你可以建立接近本地案頭應用的,直接的、高可用的、更豐富的、更動態Web使用者介面介面。
Ajax處理過程
一個Ajax互動從一個稱為XMLHttpRequest的JavaScript對象開始。如同名字所暗示的,它允許一個用戶端指令碼來執行HTTP請求,並且將會解析一個XML格式的伺服器響應。Ajax處理過程中的第一步是建立一個XMLHttpRequest執行個體。使用HTTP方法(GET或POST)來處理請求,並將目標URL設定到XMLHttpRequest對象上。
現在,記住Ajax如何首先處於非同步處理狀態?當你發送HTTP請求,你不希望瀏覽器掛起並等待伺服器的響應,取而代之的是,你希望通過頁面繼續響應使用者的介面互動,並在伺服器響應真正到達後處理它們。要完成它,你可以向XMLHttpRequest註冊一個回呼函數,並非同步地派發XMLHttpRequest請求。控制權馬上就被返回到瀏覽器,當伺服器響應到達時,回呼函數將會被調用。
在Java Web伺服器上,到達的請求與任何其它HttpServletRequest一樣。在解析請求參數後,servlet執行必需的應用邏輯,將響應序列化到XML中,並將它寫回HttpServletResponse。
一個Ajax互動從一個稱為XMLHttpRequest的JavaScript對象開始。如同名字所暗示的,它允許一個用戶端指令碼來執行HTTP請求,並且將會解析一個XML格式的伺服器響應。Ajax處理過程中的第一步是建立一個XMLHttpRequest執行個體。使用HTTP方法(GET或POST)來處理請求,並將目標URL設定到XMLHttpRequest對象上。
現在,記住Ajax如何首先處於非同步處理狀態?當你發送HTTP請求,你不希望瀏覽器掛起並等待伺服器的響應,取而代之的是,你希望通過頁面繼續響應使用者的介面互動,並在伺服器響應真正到達後處理它們。要完成它,你可以向XMLHttpRequest註冊一個回呼函數,並非同步地派發XMLHttpRequest請求。控制權馬上就被返回到瀏覽器,當伺服器響應到達時,回呼函數將會被調用。
在Java Web伺服器上,到達的請求與任何其它HttpServletRequest一樣。在解析請求參數後,servlet執行必需的應用邏輯,將響應序列化到XML中,並將它寫回HttpServletResponse。
一個Ajax互動從一個稱為XMLHttpRequest的JavaScript對象開始。如同名字所暗示的,它允許一個用戶端指令碼來執行HTTP請求,並且將會解析一個XML格式的伺服器響應。Ajax處理過程中的第一步是建立一個XMLHttpRequest執行個體。使用HTTP方法(GET或POST)來處理請求,並將目標URL設定到XMLHttpRequest對象上。
現在,記住Ajax如何首先處於非同步處理狀態?當你發送HTTP請求,你不希望瀏覽器掛起並等待伺服器的響應,取而代之的是,你希望通過頁面繼續響應使用者的介面互動,並在伺服器響應真正到達後處理它們。要完成它,你可以向XMLHttpRequest註冊一個回呼函數,並非同步地派發XMLHttpRequest請求。控制權馬上就被返回到瀏覽器,當伺服器響應到達時,回呼函數將會被調用。
在Java Web伺服器上,到達的請求與任何其它HttpServletRequest一樣。在解析請求參數後,servlet執行必需的應用邏輯,將響應序列化到XML中,並將它寫回HttpServletResponse。
執行個體
以下是我所寫的一個簡單的例子,ajaxServlet.java程式清單:
package com;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/**---------------------------* 檔案名稱: ajaxServlet.java* 建立日期: 2005-10-25* 原作者: miaohai* 著作權: miaohai* 功能說明: 產生XML文檔** 修改記錄:N/A*------------------------*/public class ajaxServletextends HttpServlet{private static final String CONTENT_TYPE="text/xml;charset=gb2312";public void init()throws ServletException{}public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{response.setContentType(CONTENT_TYPE);PrintWriter out=response.getWriter();String action=request.getParameter("action");if(("send").equals(action)){StringBuffer sb=new StringBuffer("<type>");sb.append("<type_name>AA</type_name>");sb.append("<type_name>BB</type_name>");sb.append("<type_name>CC</type_name>");sb.append("<type_name>DD</type_name>");sb.append("</type>");out.write(sb.toString());out.close();}}}html頁面:<html><head><title>AJAX.html</title></head><script type="text/javascript">/*通過非同步傳輸XMLHTTP發送參數到ajaxServlet,返回合格XML文檔*/function getResult(){var url = "servlet/com.ajaxServlet?action=send";if (window.XMLHttpRequest) { req = new XMLHttpRequest(); }else if (window.ActiveXObject){ req = new ActiveXObject("Microsoft.XMLHTTP"); } if(req){ req.open("GET",url, true); req.onreadystatechange = complete; req.send(null); } } /*分析返回的XML文檔*/function complete(){if (req.readyState == 4){ if (req.status == 200) { var type = req.responseXML.getElementsByTagName("type_name"); var str=new Array();for(var i=0;i<type.length;i++){str[i]=type[i].firstChild.data;document.all['td'].innerHTML+=str[i]+"<BR>";}}}}</script><body ><table width="80%" border="0" cellspacing="0" cellpadding="0"><tr><td id="td"> </td></tr></table></body> |