手记

【九月打卡】第十天 Ajax&Json

课程信息

● 学习课程:Java工程师2022版
● 章节名称:Ajax&Json
● 讲师:八戒猪

课程内容

1.Asynchronous JavaScript And XML(异步的JavaScript和XML)
Ajax可以在不刷新页面的前提下,进行页面局部更新
2.Ajax使用流程
XMLHttpRequest是Ajax的核心,Ajax使用该对象发起请求,接受响应
xmlhttp.onreadystatechange()事件用于监听Ajax的执行过程
xmlhttp.readyState属性说明XMLHttpRequest当前状态 readyState=4响应文本已被接收
xmlhttp.status属性服务器响应状态码,200成功,404未找到

<body>
  <input id="btnLoad" type="button" value="加载"/>
  <div id="divContent"></div>
  <script>
    document.getElementById("btnLoad").onclick = function() {
    	//1.创建XmlHttpRequest对象
      var xmlhttp;
      if(window.XMLHttpRequest){
        // Google、Opera、Safari、Firefox、IE7+浏览器
      	xmlhttp = new XMLHttpRequest();
      }esle {
        // IE6、IE7浏览器
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
 			// 2.发送Ajax请求
      xmlhttp.open("GET","/content");
      xmlhttp.send();
 			// 3.处理服务器响应
      xmlhttp.onreadystatechagne=function(){
        //响应已被接收且服务器处理成功时才执行
        if(xmlhttp.readyState==4&&xmlhttp.status==200){
          //获取响应体的文本
          var responseText = xmlhttp.responseText;
          //对服务器结果进行处理
          document.getElementById("divContent").innerHTML=
            document.getElementById("divContent").innerHTML + "<br/>"+ responseText;
        }
      }
    }
  </script>
</body>

JSON接收
JavaScript Object Notation(JavaScript对象表示方式)
JSON是轻量级的文本数据交换格式
数据由键(key)/值(value)描述,由冒号分割
大括号代表一个完整的对象,拥有多个键/值
中括号保存数组,多个对象之间使用逗号分割
3.JavaScrip操作Json

<script>
  for(var i =0;i<employeeList.length; i++){
    var employee = employeeList[i];
    console.log(employee)
    document.write("<h1>");
    document.write(employee.empno)
    document.write("</h1>");
  }
</script>

jackJson
在pom文件中引入jackson依赖,重新加载之后会在External Libraries中下载三个依赖文件。

<dependency>     
  <groupId>com.fasterxml.jackson.core</groupId>     
  <artifactId>jackson-databind</artifactId>     
  <version>2.13.3</version> 
</dependency>

代码中关于json序列化的代码只有两句

//        JSON的核心对象         
ObjectMapper objectMapper = new ObjectMapper(); 
//        将对象转化为JSON字符串,即序列化         
String json = objectMapper.writeValueAsString(list);
resp.setContentType("text/json;charset = utf-8");         
resp.getWriter().println(json);

书写html前端代码,关键语句为获取servlet响应,然后将JSON字符串转换为java对象。

 var t = xmlhttp.responseText;             
 var json = JSON.parse(t);

Ajax组件库axios
axios发送Get请求相关代码

<script>
   axios.get('/news', {
       params: {
           "t": "baidu"
       }
   }).then(function (response) {
       console.log(response);
       //这时会自动转换为json对象
       var json = response.data;
       for (var i = 0; i < json.length; i++) {
           var news = json[i];
           var container = document.getElementById("container");
           container.innerHTML = container.innerHTML + "<h2>" + news.title + "</h2>";
       }
   })
   .catch(function (error) {
       console.log(error);
   });
</script>

axios发送Post请求相关代码

//以面向对象的方式
const params = new URLSearchParams();
params.append('t', 'baidu');
axios.post('/news', params )
// axios.post("/news", "t=google",{ headers: { "content-type": "application/x-www-form-urlencoded"}} )
.then(function (response) {
            console.log(response);
            //这里获取的数据已经是java对象了
            var json = response.data;
            for (let i = 0; i < json.length; i++) {
                let news = json[i];
                //每次点击加载按钮,都追加内容到div中
                document.getElementById("container").innerHTML = document.getElementById("container").innerHTML + "<h1>" + news.title + "</h1>";
            }
        })
    .catch(function (error) {
        console.log(error);
    });

Ajax同步与异步的区别
同步是在服务器为返回JSON前,JS程序一直处于阻塞等待的状态
异步是在服务器未返回JSON前,不阻塞程序,Ajax通过回调获取结果
Ajax设置同步后,send()方法发出后,无论是否阻塞,onreadystatechange设置的事件都会失效。所以去掉onreadystatechange事件,原先这个事件中的响应处理函数直接顺序写即可

xmlhttp.open("GET", "/news?t=google",false);//设置同步方式发送请求
    xmlhttp.send();
    console.log("请求数据已经发送");
    // 3.处理服务器响应。
    // xmlhttp.onreadystatechange = function () {   //同步请求方式不再需要这个事件触发
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            var t = xmlhttp.responseText;
            var json = JSON.parse(t);
            for (let i = 0; i < json.length; i++) {
                let news = json[i];
                //每次点击加载按钮,都追加内容到div中
                document.getElementById("container").innerHTML = document.getElementById("container").innerHTML + "<h1>" + news.title + "</h1>";
            }
        }
    //}

学习收获

学习 Ajax(异步的JavaScript和XML) ,Ajax的使用流程,创建XMLHttpRequst对象,创建请求,发送请求,处理响应
JSON轻量级数据格式,Ajax+JSON开发模式,Ajax同步与异步的区别

打卡截图


0人推荐
随时随地看视频
慕课网APP