zoukankan      html  css  js  c++  java
  • ajax笔记

    Ajax笔记

    1. Ajax简介

    • AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

    • AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

    • Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。

    • 在 2005 年,Google 通过其 Google Suggest 使 AJAX 变得流行起来。Google Suggest能够自动帮你完成搜索单词。

    • Google Suggest 使用 AJAX 创造出动态性极强的 web 界面:当您在谷歌的搜索框输入关键字时,JavaScript 会把这些字符发送到服务器,然后服务器会返回一个搜索建议的列表。就和国内百度的搜索框一样!

    • 传统的网页(即不用ajax技术的网页),想要更新内容或者提交一个表单,都需要重新加载整个网页。

    • 使用ajax技术的网页,通过在后台服务器进行少量的数据交换,就可以实现异步局部更新。

    • 使用Ajax,用户可以创建接近本地桌面应用的直接、高可用、更丰富、更动态的Web用户界面。

    2. Ajax使用

    2.1 使用js伪造Ajax

    我们可以使用前端的一个标签来伪造一个ajax的样子。iframe标签

    1. 新建一个module :sspringmvc-06-ajax , 导入web支持!

    2. 编写一个 ajax-frame.html 使用 iframe 测试,感受下效果

      <!DOCTYPE html>
      <html>
      <head lang="en">
          <meta charset="UTF-8">
          <title>iandf</title>
      </head>
          
      <body>
      
      <script type="text/javascript">
          window.onload = function(){
              var myDate = new Date();
              document.getElementById('currentTime').innerText = myDate.getTime();
          };
      
          function LoadPage(){
              var targetUrl =  document.getElementById('url').value;
              console.log(targetUrl);
              document.getElementById("iframePosition").src = targetUrl;
          }
      
      </script>
      
      <div>
          <p>请输入要加载的地址:<span id="currentTime"></span></p>
          <p>
              <input id="url" type="text" value="https://www.baidu.com/"/>
              <input type="button" value="提交" onclick="LoadPage()">
          </p>
      </div>
      
      <div>
          <h3>加载页面位置:</h3>
          <iframe id="iframePosition" style=" 100%;height: 500px;"></iframe>
      </div>
      
      </body>
      </html>
      
    3. 打开浏览器测试,实际上是请求了https://www.baidu.com/,但是输入栏的地址没有变

    利用AJAX可以做:

    • 注册时,输入用户名自动检测用户是否已经存在。
    • 登陆时,提示用户名密码错误
    • 删除数据行时,将行ID发送到后台,后台在数据库中删除,数据库删除成功后,在页面DOM中将数据行也删除。
    • ....等等

    2.2 利用jquery使用Ajax技术

    纯JS原生实现Ajax我们不去讲解这里,直接使用jquery提供的,方便学习和使用,避免重复造轮子,有兴趣的同学可以去了解下JS原生XMLHttpRequest !

    Ajax的核心是XMLHttpRequest对象(XHR)。XHR为向服务器发送请求和解析服务器响应提供了接口。能够以异步方式从服务器获取新数据。

    jQuery 提供多个与 AJAX 有关的方法。通过 jQuery AJAX 方法,您能够使用 HTTP Get 和 HTTP Post 从远程服务器上请求文本、HTML、XML 或 JSON – 同时您能够把这些外部数据直接载入网页的被选元素中。

    jQuery 不是生产者,而是大自然搬运工。

    jQuery Ajax本质就是 XMLHttpRequest,对他进行了封装,方便调用!

    jQuery.ajax(...)
          部分参数:
                url:请求地址
                type:请求方式,GET、POST(1.9.0之后用method)
            headers:请求头
                data:要发送的数据
        contentType:即将发送信息至服务器的内容编码类型(默认: "application/x-www-form-urlencoded; charset=UTF-8")
              async:是否异步
            timeout:设置请求超时时间(毫秒)
          beforeSend:发送请求前执行的函数(全局)
            complete:完成之后执行的回调函数(全局)
            success:成功之后执行的回调函数(全局)
              error:失败之后执行的回调函数(全局)
            accepts:通过请求头发送给服务器,告诉服务器当前客户端可接受的数据类型
            dataType:将服务器端返回的数据转换成指定类型
              "xml": 将服务器端返回的内容转换成xml格式
              "text": 将服务器端返回的内容转换成普通文本格式
              "html": 将服务器端返回的内容转换成普通文本格式,在插入DOM中时,如果包含JavaScript标签,则会尝试去执行。
            "script": 尝试将返回值当作JavaScript去执行,然后再将服务器端返回的内容转换成普通文本格式
              "json": 将服务器端返回的内容转换成相应的JavaScript对象
            "jsonp": JSONP 格式使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数
    

    2.3 使用HttpServletResponse返回数据

    1. 配置web.xml 和 springmvc的配置文件

    2. 编写Controller

      @Controller
      public class AjaxController {
      
         @RequestMapping("/a1")
         public void ajax1(String name , HttpServletResponse response) throws IOException {
             if ("admin".equals(name)){
                 response.getWriter().print("true");
            }else{
                 response.getWriter().print("false");
            }
        }
      
      }
      
    3. 导入jquery , 可以使用在线的CDN,然后下载lib,链接在https://www.bootcdn.cn/jquery/上复制

      <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
      
    4. 编写index.jsp测试

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
       <head>
         <title>$Title$</title>
        <%--<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>--%>
         <script src="${pageContext.request.contextPath}/statics/js/jquery-3.1.1.min.js"></script>
         <script>
             function a1(){
                 $.post({
                     url:"${pageContext.request.contextPath}/a1",
                     data:{'name':$("#txtName").val()},
                     success:function (data,status) {
                         alert(data);
                         alert(status);
                    }
                });
            }
         </script>
       </head>
          
       <body>
      
      <%--onblur:失去焦点触发事件--%>
      用户名:<input type="text" id="txtName" onblur="a1()"/>
      
       </body>
      </html>
      
    5. 启动tomcat测试!打开浏览器的控制台,当我们鼠标离开输入框的时候,可以看到发出了一个ajax的请求!是后台返回给我们的结果!测试成功!

    2.4 使用springMVC返回数据

    1. 实体类user

      @Data
      @AllArgsConstructor
      @NoArgsConstructor
      public class User {
      
          private String name;
          private int age;
          private String sex;
      
      }
      
    2. 获取一个集合返回给前端

      @ResponseBody()
      @RequestMapping("/a2")
      public List<User> ajax2(){
          ArrayList<User> users = new ArrayList<>();
          users.add(new User("iandf 1号",3,"男"));
          users.add(new User("iandf 2号",3,"男"));
          users.add(new User("iandf 3号",3,"男"));
          users.add(new User("iandf 4号",3,"男"));
          return users;
      }
      
    3. 前端jsp

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
          <title>Title</title>
      </head>
      <body>
      <input type="button" id="btn" value="获取数据"/>
      <table width="80%" align="center">
          <tr>
              <td>姓名</td>
              <td>年龄</td>
              <td>性别</td>
          </tr>
          <tbody id="content">
          </tbody>
      </table>
      
      <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
      <script>
      
          $(function () {
              $("#btn").click(function () {
                  $.post("${pageContext.request.contextPath}/a2",function (data) {
                      console.log(data)
                      var html="";
                      for (var i = 0; i <data.length ; i++) {
                          html+= "<tr>" +
                              "<td>" + data[i].name + "</td>" +
                              "<td>" + data[i].age + "</td>" +
                              "<td>" + data[i].sex + "</td>" +
                              "</tr>"
                      }
                      $("#content").html(html);
                  });
              })
          })
      </script>
      </body>
      </html>
      
    4. 打开浏览器测试

  • 相关阅读:
    mysql 历史版本下载
    mysql 5.7 版本 You must reset your password using ALTER USER statement before executing this statement报错处理
    5.7 zip 版本的安装 以及遇到的坑
    mysql 5.6zip版本的卸载与5.7 zip 版本的安装
    mysql数据库的备份与还原
    本地Navicat连接docker里的mysql
    docker修改数据库密码
    docker 在push镜像到本地registry出现的500 Internal Server Error
    linux 没有界面内容显示不全解决办法
    json与map互相转换
  • 原文地址:https://www.cnblogs.com/iandf/p/13641937.html
Copyright © 2011-2022 走看看