你问我什么叫ajax,我也不太了解,我了解的是那支培养了无数荷兰足球精华的Ajax,谁知道怎么有人用几个单词的头字母也能凑出这个单词来,不过感觉用它来做东西,应该会挺有意思的
比如当用户在注册的时候,用户点一个按纽不用刷新界面就可以获得一句提示,是有这人还是没有这人啊?这次我尝试了用ajax技术来做一个三级关键的下拉列表,而这是我要讲的关键。
其实现在一般的ajax都是向Servlet发出请求,之后服务器响应,再偷摸的把结果传给它,之后显示出来,而换到Struts,有人会发甍,也一样,Action是Servlet,DispatchAction也是,只要把代码往这里写,让它往.do那里请求就行了。
在接下来我就向大家介绍我是怎样实现上述功能的
因为大学里面的结构是这里的
学院-专业-班级-学生
在学生注册的时候他是依赖于上述对象的,所以用户注册就需要一个三级的下拉选择
而ajax就能象变魔术一样,从服务器那里偷摸弄来您需要的列表
下面我先给大家展示一下第一个功能是怎么实现的吧?
当用户在注册的时候,点一个按纽,之后会弹出一个alert来告诉你这个用户是否有人用了,下面就让我们来看看这个功能是怎么实现的吧?


这里定义了按纽,用来测试老师是否已经存在了
大体的ajax的JS代码都上面这四部分,
先是创建XMLHttpRequest,
var xmlHttp;
function createXMLHttpRequest()
{
 if (window.XMLHttpRequest) 
 { 
  xmlHttp = new XMLHttpRequest(); 
 }
 else if (window.ActiveXObject) 
 {
  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
}
之后是客户响应部分的代码
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   定义响应地址
  xmlHttp.open("GET",url, true)    发出响应
  xmlHttp.onreadystatechange = checkUser  把从服务器得到的响应再传给另个函数
  xmlHttp.send(null)
   }
}

function checkUser()
{
 if (xmlHttp.readyState == 4) 
 {
  if (xmlHttp.status == 200) 
  {
   alert(xmlHttp.responseText)        这里是对响应结果的操作,在这里我们是滩出对话框,并把服务器发来的信息显示出来
  }
 }
}
我把所有乱七八糟的操作都放到了一个DispatchAction里,所以它也不例外的在这个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;
    }
它仅仅是把业务逻辑部分的结果发送回去,而真正的判断是在业务逻辑那里实现的,
public String checkUserIsExistForAjax( String user )把结果弄成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;用户不存在
    }