ajax和json类型

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    onload = function() {
        var button = document.getElementById("button");
        button.onclick = function() {
            var xmlRequest = new XMLHttpRequest();//1.创建异步请求对象
            //2.打开服务器的连接,参数:Get/post url 异步为true,同步为false
            xmlRequest.open("Get", "/MyServlet/OtherServlet", true);
            //3.发送请求
            xmlRequest.send(null);//Get()方法没有请求体
            //给异步请求对象添加状态监听事件
            xmlRequest.onreadystatechange = function() {//当异步对象状态发生改变触发该事件
                /*5种状态:
                0状态:刚创建,未调用open()方法
                1状态:请求开始,调用open()方法,未调用send()方法
                2状态:请求完成,调用send()方法
                3状态:服务器开始响应,但未响应完全
                4状态:服务器响应完全,结束响应(通常只关心这个状态)
                 */
                //判断服务器是否相应完全并且是否相应成功200状态码
                if (xmlRequest.readyState == 4 && xmlRequest.status == 200) {

                    /*获取响应内容,要和servlet的响应类型对应
                    responseText:获取响应的文本内容,包括普通文本内容(text/html;charset=utf-8)和json串(也就是字符串)
                    responseXml:获取响应的xml格式,(text/xml;charset=utf-8),这时获取的是document对象,需要进行xml的解析
                     */
                    var text = xmlRequest.responseText;
                    var h2 = document.getElementById("h2");
                    //将相应信息放入h2标签中完成局部刷新
                    h2.innerHTML = text;
                }

            };

 // 消除缓存带来的麻烦
  // 1)在路径后面直接加个随机参数(缺点:占浏览器资源,每次请求都缓存起来,不推荐)

  //2) setRequestHeader(“If-Modified-Since”,0);(推荐使用,完美解决方案。)

            //post方式多了个请求体和请求头的设置,setRequestHeader("Context-Type","application/x-www-form-urlencoded")
            xmlRequest.open("Post", "/MyServlet/OtherServlet", true);
            /*
            text/html:文本类型为text/html,浏览器在接受该文本会用html解析器解析
            text/plain:普通文本,浏览器在接收该文本不做任何操作
            text/xml:文本类型为text/xml,需要自己解析,一般不用
            application/x-www-form-urlencoded:序列化处理,键值对形式。
            application/json:json格式    
                
            设置文本类型:
            html和jsp:页面都写好了contentType="text/html; charset=UTF-8",不用自己写
            
            servlet:response.setContentType();参数可为:"text/html;charset=utf-8"或"text/xml;charset=utf-8"
            所以要用对应格式接收servlet的响应数据,比如:
            异步请求对象.responseText:可接收普通文本和json串(也就是字符串)
            异步请求对象.responseXml:可接收xml文本
            
            ajax的Content-Type:需要自己写,格式如下(jQuery中做过封装,另当别论)(Post方式)
            application/x-www-form-urlencoded:序列化处理,键值对形式。(Post方式)
            application/json:json格式(post方式)
            
            
            json:
                格式:属性只能用双引号括起来,属性值格式就是对应类型的形式
                例如:{"name":"张三","age":25}
                对象:用{}表示
                数组:用[]表示
                字符串:""
            json串:
                格式:将json变成字符串。注意:js中双引号和单引号一样,但是Java中是不一样的,要进行转义
                例如:'{"name":"张三","age":25}',Java中:"{\"name\":\"张三\",\"age\":25}"
             */
            xmlRequest.setRequestHeader("Content-Type",
                    "application/x-www-form-urlencoded");
            xmlRequest.send("userName=张三&passWord=123");//不同于Get这里要给出要传递的数据 

        };
    };
</script>
</head>
<body>
    <button id="button">添加</button>
    <h2 id="h2"></h2>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/ryuhfxz/article/details/81335451