jQuery+Ajax实现无刷新操作
使用jQuery实现Ajax操作
想要实现Ajax页面无刷新效果,但是直接利用Ajax代码实在有些麻烦,所以就想用jQuery实现。jQuery很好的封装了Ajax的核心对象XMLHTTPRequest。所以用起来非常方便。
首先,创建服务器端代码,这里用Servlet实现服务器端的数据处理;代码如下:
protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException{ //设置编码格式 resp.setContentType("text/html;charset=UTF-8"); //创建输出对象 PrintWriterout=resp.getWriter(); //得到请求参数 Stringname=req.getParameter("uname"); //判断 if(name==null||name.length()==0) { out.println("用户名不能为空!"); } else { //判断 if(name.equals("cheng")) { out.println("用户名["+name+"]已存在!请使用其他用户名!"); } else { out.println("用户名["+name+"]尚未存在!您可以注册!"); } } }
然后,创建JSP页面,要使用jQuery,必须在页面之中引入jQuery库,也就是一个Javascript文件,另外还需引入自定义的Javascript文件,如下:
<!--引入Javascript文件--> <scripttype="text/javascript"src="js/jquery-1.2.6.js"></script> <scripttype="text/javascript"src="js/verify.js"></script>
而JSP页面只需要一个文本框、一个普通按钮和一个空白DIV层即可,该DIV用于显示服务器端返回的处理结果;按钮的单击事件触发verify()方法。如下:
<body> <center> 用户名:<inputtype="text"id="uname"name="uname"/> <br/> <inputtype="button"name="btnVerify"value="验证"onclick="verify()"/> <br/> <divid="result"> </div> </center> </body>
注意:Ajax方式下不需要使用表单来进行数据提交,因此页面中不用写<form>标签。
接下来,创建一个verify.js文件,在该文件中创建verify()方法,用来实现Ajax的无刷新效果,这是该示例中最为重要的一步。想要使用jQuery实现Ajax分为以下四步:
- ·获取文本框中的内容;
- ·将文本框中的内容发送给服务器端的Servlet;
- ·接收服务器端返回的数据;
- ·将服务器端返回的数据动态地显示在JSP页面上。
针对于第一步,首先通过jQuery获得对象,并取得对象的值,如下:
//取得文本框对象,通过$()获取的所有对象都是jQuery对象 varjQueryObject=$("#uname"); //获取文本框中的值 varuserName=jQueryObject.val();
通过jQuery中的$()函数获得页面的节点,该函数得到的是一个jQuery对象,然后通过jQuery中的val()方法取得节点的值,也就是文本框中的内容。
针对于第二步,我们使用jQuery的get()方法来发送数据到服务器端,如下:
$.get("TestServlet?uname="+userName,null,callback);
该方法返回一个XMLHttpRequest对象,该方法提供三个参数,第一个是请求的服务器端的URL,第二个参数是待发送的参数,一般可以在第一个URL中直接带上参数,所以一般该参数为null,第三个参数是服务器端成功处理完成数据之后的一个回调函数。
针对于第三步,就应该创建一个回调函数,用来处理服务器端返回的数据,如下:
//回调函数 functioncallback(data) { } 该回调函数有一个参数,该参数就是客户端返回的数据。 针对于第四步,再次利用jQueyr的选择器函数得到DIV层,将返回的数据显示在该层之上,如下: functioncallback(data) { /** *第三步,接收服务器端返回的数据 */ //将服务器端返回的数据动态的显示在页面上 varresultObject=$("#result"); resultObject.html(data); }
利用jQuery的html()方法将数据动态地显示到DIV层之中。
现在我们对以上的代码进行优化,我们用两句代码就可以实现以上所有代码的功能,这就是jQuery的强大之处之一。在verify.js文件之中的verify()方法也可以写成下面的形式:
$.get("TestServlet?uname="+$("#uname").val(),null,function(data){ $("#result").html(data); })
再为大家分享一个,下面是“无刷新登录”的例子,采用Ashx+jQueryAjax实现。
1、后台实例代码ashx文件(可替换为从数据库中读取)
publicvoidProcessRequest(HttpContextcontext) { context.Response.ContentType="text/plain"; //context.Response.Write("HelloWorld"); stringname=context.Request.Params["name"].ToString().Trim(); if("china".Equals(name)) { context.Response.Write("1");//1标志loginsuccess } else { context.Response.Write("0");//0标志loginfail } }
2、前台实例代码aspx文件
<htmlxmlns="http://www.w3.org/1999/xhtml"> <headrunat="server"> <title></title> <scriptsrc="js/jquery-1.4.2.js"type="text/javascript"></script> <scripttype="text/javascript"> $(function(){ $("#test").live("click",function(){ //alert(0); $.ajax({ type:'POST', url:'Handler1.ashx', data:{"name":$("#name").val()}, success:function(data){ if(1==data) alert('loginsuccess'); else alert('loginfail'); } }); }); }); </script> </head> <body> <formid="form1"runat="server"> <div> <inputtype="text"name="name"id="name"/> <inputtype="button"name="test"id="test"value="validate"/> </div> </form> </body> </html>
分别在前台aspx页面和后台ashx页面中输入如上代码,就实现了一个超级简单的Ajax登录,很简单吧?