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 ajaxServlet
extends 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>