你問(wèn)我什么叫ajax,我也不太了解,我了解的是那支培養(yǎng)了無(wú)數(shù)荷蘭足球精華的Ajax,誰(shuí)知道怎么有人用幾個(gè)單詞的頭字母也能湊出這個(gè)單詞來(lái),不過(guò)感覺(jué)用它來(lái)做東西,應(yīng)該會(huì)挺有意思的
比如當(dāng)用戶在注冊(cè)的時(shí)候,用戶點(diǎn)一個(gè)按紐不用刷新界面就可以獲得一句提示,是有這人還是沒(méi)有這人啊?這次我嘗試了用ajax技術(shù)來(lái)做一個(gè)三級(jí)關(guān)鍵的下拉列表,而這是我要講的關(guān)鍵。
其實(shí)現(xiàn)在一般的ajax都是向Servlet發(fā)出請(qǐng)求,之后服務(wù)器響應(yīng),再偷摸的把結(jié)果傳給它,之后顯示出來(lái),而換到Struts,有人會(huì)發(fā)甍,也一樣,Action是Servlet,DispatchAction也是,只要把代碼往這里寫(xiě),讓它往.do那里請(qǐng)求就行了。
在接下來(lái)我就向大家介紹我是怎樣實(shí)現(xiàn)上述功能的
因?yàn)榇髮W(xué)里面的結(jié)構(gòu)是這里的
學(xué)院-專業(yè)-班級(jí)-學(xué)生
在學(xué)生注冊(cè)的時(shí)候他是依賴于上述對(duì)象的,所以用戶注冊(cè)就需要一個(gè)三級(jí)的下拉選擇
而ajax就能象變魔術(shù)一樣,從服務(wù)器那里偷摸弄來(lái)您需要的列表
下面我先給大家展示一下第一個(gè)功能是怎么實(shí)現(xiàn)的吧?
當(dāng)用戶在注冊(cè)的時(shí)候,點(diǎn)一個(gè)按紐,之后會(huì)彈出一個(gè)alert來(lái)告訴你這個(gè)用戶是否有人用了,下面就讓我們來(lái)看看這個(gè)功能是怎么實(shí)現(xiàn)的吧?


這里定義了按紐,用來(lái)測(cè)試?yán)蠋熓欠褚呀?jīng)存在了
大體的ajax的JS代碼都上面這四部分,
先是創(chuàng)建XMLHttpRequest,
var xmlHttp;
function createXMLHttpRequest()
{
 if (window.XMLHttpRequest) 
 { 
  xmlHttp = new XMLHttpRequest(); 
 }
 else if (window.ActiveXObject) 
 {
  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
}
之后是客戶響應(yīng)部分的代碼
function teacherCheck() 
{
 var f = document.TeacherRegisterForm 從表單里讀字段
 var user = f.user.value
 if(user=="") 
 {
   window.alert("用戶名不能為空!")
  f.user.focus()
   return false
   }
 else 
 {
  createXMLHttpRequest()        這里都是精華了
  var url = "ajax.do?method=checkUserIsExist&user="+user   定義響應(yīng)地址
  xmlHttp.open("GET",url, true)    發(fā)出響應(yīng)
  xmlHttp.onreadystatechange = checkUser  把從服務(wù)器得到的響應(yīng)再傳給另個(gè)函數(shù)
  xmlHttp.send(null)
   }
}

function checkUser()
{
 if (xmlHttp.readyState == 4) 
 {
  if (xmlHttp.status == 200) 
  {
   alert(xmlHttp.responseText)        這里是對(duì)響應(yīng)結(jié)果的操作,在這里我們是灘出對(duì)話框,并把服務(wù)器發(fā)來(lái)的信息顯示出來(lái)
  }
 }
}
我把所有亂七八糟的操作都放到了一個(gè)DispatchAction里,所以它也不例外的在這個(gè)DA中了
public ActionForward checkUserIsExist( ActionMapping mapping,
            ActionForm form, HttpServletRequest req, HttpServletResponse res )
            throws Exception
    {
        Service service = getService();
        res.getWriter().write(service.checkUserIsExistForAjax( req.getParameter( "user" ) ) );
        return null;
    }
它僅僅是把業(yè)務(wù)邏輯部分的結(jié)果發(fā)送回去,而真正的判斷是在業(yè)務(wù)邏輯那里實(shí)現(xiàn)的,
public String checkUserIsExistForAjax( String user )把結(jié)果弄成String的形式傳回去
    {
        Connection connection = null;
        PreparedStatement pstmt1 = null;
        ResultSet rs = null;
        try
        {
            connection = getConnection();
            pstmt1 = connection
                    .prepareStatement( "select * from user where user=?" );
            pstmt1.setString( 1, user );
            rs = pstmt1.executeQuery();
            rs.last();
            if ( rs.getRow() > 0 )
            {
                return ID.M_EXIST; 用戶存在
            }
        }
        catch ( Exception e )
        {
            e.printStackTrace();
        }
        finally
        {
            close( rs );
            close( pstmt1 );
            close( connection );
        }
        return ID.M_NOEXIST;用戶不存在
    }