AJAX

一、JS方式

(一)原理:

异步刷新:只刷新需要修改的部分

(二)JS实现

1)XMLHttpRequest对象方法:

open(post|get , 服务器地址, true) 与服务器建立连接
setRequestHeader(header,value)

get:  不需要设置此方法
post: 需要设置
	a、如果请求元素中包含了文件上传
		setRequestHeader("Content-Type","multipart/form-data");
	b、不包含文件上传
		setRequestHeader("Content-Type","application/x-www-form-urlencoded")
2)XMLHttpRequest对象属性

readystate:请求状态 4代表请求完毕
status : 响应状态 200代表响应正常
onreadystatechange: 回调函数
responseText:响应格式为String
responseXML:响应格式为XML

(三)源码

1)JSP
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">


<script type="text/javascript">
	function register()
	{
		
		var mobile = document.getElementById("mobile").value;
		//通过ajax异步方式 请求服务端
		xmlHttpRequest = new XMLHttpRequest();
		
		//设置xmlHttpRequest对象的回调函数
		xmlHttpRequest.onreadystatechange = callBack  ;
		
		xmlHttpRequest.open("post","MobileServlet",true);
		//设置post方式的 头信息
		xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		xmlHttpRequest.send("mobile="+mobile);//k=v    
	}
	
	function registerGet()
	{
		
		var mobile = document.getElementById("mobile").value;
		//通过ajax异步方式 请求服务端
		xmlHttpRequest = new XMLHttpRequest();
		
		//设置xmlHttpRequest对象的回调函数
		xmlHttpRequest.onreadystatechange = callBack  ;
		
		xmlHttpRequest.open("get","MobileServlet?mobile="+mobile,true);
		//设置post方式的 头信息  ,get不需要
		//xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		xmlHttpRequest.send(null);//k=v      
	}
	
	//定义回调函数 (接收服务端的返回值)
	function callBack(){
		if(xmlHttpRequest.readyState ==4 && xmlHttpRequest.status   ==200){
			//接收服务端返回的数据
			var data = xmlHttpRequest.responseText ;//服务端返回值为string格式
			alert(data.length +"==="+data)
			if(data == "true"){
				alert("请号码已存在,请更换!");
			}else{
				alert("注册成功!");
			}
		}
	}

</script>

<title>Insert title here</title>
</head>
<body>
		手机:<input  id="mobile"/>
		<br/>
		<input type="button" value="注册" onclick="registerGet()" />
</body>
</html>
2)servlet
public class MobileServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public MobileServlet() {
        super();
    }
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=UTF-8");
		String mobile =  request.getParameter("mobile") ;

		PrintWriter out = response.getWriter();
		if("18888888888".equals(mobile)) {
			out.write( "{\"msg\":\"true\"}"   );//   {"\"msg\":\"true\""}
		}else {
			out.write( "{\"msg\":\"false\"}"   );// "\"msg\":\"false\""    
		}
		out.close(); 
		
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
}

二、Jquery方式

$.ajax({
url:请求地址
type:"get | post | put | delete " 默认是get,
data:请求参数 {"id":"123","pwd":"123456"},
dataType:请求数据类型"html | text | json | xml | script | jsonp ",
success:function(result,textStatus){ },//请求成功时
error:function(xhr,errorMessage,error){}//请求失败时
})

$.get(
服务器地址,
请求数据,
function (result){

},
预期返回值类型(string\xml)
);

$.post(
服务器地址,
请求数据,
function (result){

},
	"xml""json""text" 
);



$(xxx).load(
服务器地址,
请求数据
);

load:将服务端的返回值  直接加载到$(xxx)所选择的元素中



$.getJSON(
服务器地址,
JSON格式的请求数据,
function (result){

}

);
1)JSP
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<script type="text/javascript">
	function register()
	{
			var $mobile = $("#mobile").val();
			/*
			$.ajax({
				url:"MobileServlet",
				请求方式:"post",
				data:"mobile="+$mobile, 
				success:function(result,testStatus)
				{
					if(result == "true"){
						alert("已存在!注册失败!");
					}else{
						alert("注册成功!");
					}
				},
				error:function(xhr,errrorMessage,e){
					alert("系统异常!");
				}


				});
				
				
				$.post(
						"MobileServlet",
						"mobile="+$mobile,
					function (result){
							if(result == "true"){
								alert("已存在!注册失败!");
							}else{
								alert("注册成功!");
							}
					},
					"text"
					);
			
				
				$.get(
						"MobileServlet",
						"mobile="+$mobile,
					function (result){
							if(result == "true"){
								alert("已存在!注册失败!");
							}else{
								alert("注册成功!");
							}
					}
					);
				
				$("#tip").load(
						"MobileServlet",
						"mobile="+$mobile
				);
			
			
			var student = {"name":"zs" ,  "age":23} ;
			
			//alert(student.name +"--" +student.age) ;
			//var name = ["xx","xx","xx"] ;
			var students =[
					
					{"name":"zs" ,  "age":23} ,
					{"name":"ls" ,  "age":24} ,
					{"name":"ww" ,  "age":25} 
					
			];
			alert(students[1].name +"--" +students[1].age) ;
			*/
			$.getJSON(
					"MobileServlet",
				//	"mobile="+$mobile,
					{"mobile":$mobile},
				function (result){//msg:true|false
						alert(123);
						if(result.msg == "true"){
							alert("已存在!注册失败!");
						}else{
							alert("注册成功!");
						}
				}
			);
	}
</script>

<title>Insert title here</title>
</head>
<body>
		手机:<input  id="mobile"/>
		<br/>
		<input type="button" value="注册" onclick="register()" />
		<span id="tip"></span>

</body>
</html>
2) Servlet

四、 微博点赞练习

1)JSP
<html>
  <head>
    <title>首页</title>
    <style>
      h1{
        font-size: 20px;
      }
      .thumbsup{
        color: darkgray;
        cursor: pointer;
      }
      .thumbsupNum{
        color:lightsalmon;
      }
    </style>
  </head>
  <body>
    <h1>Welcome ${sessionScope.user.username}</h1>
    <div class="article" id="1">
      <h5></h5>
      <p>从运载发射,到轨道修正;从地月转移,到月面下降;从采样后月面上升,到环月等待,回到地球……戳视频↓↓一起看!</p>
      <iframe src="http://t.cn/A6GmD9Lc"   width="100%" height="500" frameborder="0">
      </iframe>
      <br>
      <span class="thumbsup" active="false"></span><!--active是自定义属性-->
      <span class="thumbsupNum"></span>
    </div>
  </body>

  <script type="text/javascript" src="js/jquery-1.8.2.min.js"></script>
  <script type="text/javascript">
      //从数据库获取该条微博的点赞数,显示出来
      var articleID = $(".article").attr("id");
      console.log("id:",articleID);

      $.ajax({
          url:"/SelectLikesServlet",
          data:{"articleID":articleID.toString()},//存入request域,servlet通过req.getParameter获取
          type:"post",
          dataType:"JSON",
          success:function (result) {
              //服务器传来的result是JSON数据,该数据由Article对象转换而来
              $(".thumbsupNum").text(result.likesNum);
          }
      })

      //如果用户点击”赞“
      ifCancelThumbsup = "true";
      var ifCancelThumbsup;
      $(".thumbsup").click(function () {
          if($(".thumbsup").attr("active")=="false"){
              //改颜色
              $(".thumbsup").css("color","coral");

              //改变active属性的值
              $(".thumbsup").attr("active","true")

              ifCancelThumbsup = "false";
          }else if($(".thumbsup").attr("active")=="true"){
              //改颜色
              $(".thumbsup").css("color","darkgray");
              //改变active属性的值
              $(".thumbsup").attr("active","false")

              ifCancelThumbsup = "true";
          }
          console.log("id:",articleID);
          //改变数据库中的数据
          $.ajax({
              url:"/ArticleUpdateServlet",
              data:{"ifCancelThumbsup":ifCancelThumbsup,"articleID":articleID.toString()},//存入request域,servlet通过req.getParameter获取
              type:"post",
              dataType:"JSON",
              success:function (result) {
                  //服务器传来的result是JSON数据,该数据由Article对象转换而来
                  $(".thumbsupNum").text(result.likesNum);
              }
          })
      })

  </script>
</html>
2) Servlet
@WebServlet("/SelectLikesServlet")
public class SelectLikesServlet extends HttpServlet {
    @Override
    public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        //1.接受参数
        String str = req.getParameter("articleID");
        int articleID = Integer.parseInt(str);

        //initAr的点赞数初始化为0
        BlogArticle initAr = new BlogArticle();
        initAr.setId(articleID);
        //2.调取service方法
        BlogArticleService service = new BlogArticleService();
        BlogArticle ar = null;
        try {
            ar = service.selectBlogArticle(initAr);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        //3.将对象返回给客户端,需要转换成json格式
        JSONObject jo = JSONObject.fromObject(ar);
        res.setContentType("text/html;charset=utf-8");
        PrintWriter out = res.getWriter();
        out.print(jo);
        System.out.println(jo);
    }
}

@WebServlet("/ArticleUpdateServlet")
public class ArticleUpdateServlet extends HttpServlet {
    @Override
    public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        //1.接受参数(是点赞,还是取消点赞)
        String ifCancleLikes = req.getParameter("ifCancelThumbsup");
        String str = req.getParameter("articleID");
        System.out.println("str:"+str);
        int articleID = 1;
        System.out.println(articleID);
        System.out.println(ifCancleLikes);

        BlogArticle initAr = new BlogArticle();
        initAr.setId(articleID);
        //2.调取service方法
        BlogArticleService service = new BlogArticleService();
        BlogArticle ar = null;
        try {
            ar = service.updateBlogArticle(initAr,ifCancleLikes);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        //3.将对象返回给客户端,需要转换成json格式
        JSONObject jo = JSONObject.fromObject(ar);
        res.setContentType("text/html;charset=utf-8");
        PrintWriter out = res.getWriter();
        out.print(jo);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值