javaWeb22(ajax&json的即时自动补全)

一,ajax

可以用到$.ajax也可以jquery.ajax,因为jquery就相当于$;

记得要用到键值对的方式写

比如: 

 $.ajax({
                url:"vname.do",
                data:{sname:name},
                type:"post",
                dataType:"text",
                success:function(data){
                    //alert(data);
                    $("#aa").html(data);
                },
                error:function(){
                    alert("有误")
                }
            });

其要用  ,隔开

 也可以用另一个方法:

$.post     他只返回正确的方法,所以不用写error

$.post("vname.do",{sname:name},function(data){
                 $("#aa").html(data);给span赋值 innerHTML
             },"text")
         })

二,json的即时自动补全

  $(function(){
    	 //让div隐藏
    	 $("#aa").hide();
    	 //给文本框添加失焦事件
    	 $("#sname").keyup(function(){
    		 //让div显示
    		 $("#aa").show();
    		//获取文本框的值
    		var name=$("#sname").val();
    		//第一种$.ajax()
    		/* $.ajax({
    			url:"vname.do",//请求地址(servlet)
    			data:{sname:name},//"sname="+name+"&spwd="+pwd,请求参数
    			type:"post",//请求方式
    			dataType:"text",//预期服务器可能返回的数据类型
    			success:function(data){//成功的回调函数
    				//alert(data);//data是服务器返回的响应
    			    $("#aa").html(data);//给span赋值 innerHTML
    			},
    			error:function(){//失败的回调函数
    				alert("有误")
    			}
    		}); */
    		//第二种$.post()
    		 $.post("autoFill.do",{sname:name},function(data){
    			//把json格式的对象数组字符串---》js的对象数组
    			//var ss=evel(data);//js
    			var ss=$.parseJSON(data);//jQuery
    			//alert(ss.length);
    		 	var sb="<ul>";
    			//循环遍历
    			$.each(ss,function(i,u){//下标 ,元素
    				sb+="<li onclick=\"myf('"+u.uname+"')\" onmouseout=\"this.className='yy'\" onmouseover=\"this.className='xx'\">"+u.uname+"</li>";
    			})
    			 sb+="</ul>"; 
    			//给div赋值
    			 $("#aa").html(sb);  
    		 })
    	 })
     })
     
     function myf(name){
    	 //给文本框赋值
    	 $("#sname").val(name);
    	 //让div隐藏
    	 $("#aa").slideUp(500);
     }

这里用到了两种方法post和ajax

还用到几个事件:keyup(鼠标弹起事件);onmouseout(鼠标移开事件); onmouseover(鼠标移上事件);onclick(点击事件);

在servlet中要用到json 需要倒包

//将集合解析成字符串
        String str=JSON.toJSONString(ls);

@WebServlet("/autoFill.do")
public class AutoFillServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//设置编码方式
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html; charset=UTF-8");
		//获取out
		PrintWriter out =resp.getWriter();
		//接收客户端传递过来的参数
		String name=req.getParameter("sname");
		//调用biz层的模糊查询方法
		//错误示范 模拟数据
		UserDao ud=new UserDao();
		List<User> ls=ud.getall(name);
		//怎么把集合转成字符串----->json格式的字符串
		StringBuffer sb=new StringBuffer() ;
		/*sb.append("[");
		for(User u:ls) {
			sb.append("{");
			sb.append("\"uname\":\""+u.getUname()+"\",");
			sb.append("\"usex\":\""+u.getUsex()+"\",");
			sb.append("\"uage\":"+u.getUage());
			sb.append("}");
		}
		sb.append("]");*/
		
		//将集合解析成字符串
		String str=JSON.toJSONString(ls);
		
		//由于需要局部刷新 不可用转发 重定向 location.href
		//把响应输送到客户端
		out.write(str);
		out.flush();
		out.close();
	}

记住在里不能用到request,这是异步不能用到跳界面

所以用到out

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值