Ajax

Ajax初体验

  • AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
  • AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
  • AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
  • AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
    简单来说ajax是一种异步刷新的方法。在不使用异步刷新的情况下,如果数据更新至前端,我们之恶能做重定向或者转发,这样会使整个页面刷新。而ajax就做到了在不刷新整个页面的情况下,请求并更新数据(比如百度的搜索框)。


    image.png

伪造ajax

前端中的iframe标签有类似与ajax的效果。下面是一个简单的iframe展示,在文本框中输入对应的域名,就会在iframe框中显示。

<!DOCTYPE>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>iframe 体验</title>
    <script>
        function go(){
            var url = document.getElementById("url").value;
            document.getElementById("iframe1").src = url;
        }
    </script>
</head>
<body>

<div>
    <p>请输入地址:</p>
    <input type="text" value="http://www.baidu.com" id="url">
    <input type="button" onclick="go()">
</div>
<div>
    <iframe id="iframe1" style="width: 100%;height: 500px"></iframe>
</div>
</body>
</html>

效果展示:

image.png

ajax初体验

上面的iframe虽然在效果上与ajax比较向,但是不一样。上面的iframe是把整个的网页(比如bing的网页)加载过来了,而不是通过xhr请求(异步请求,区别于get,post等请求)请求一个数据(json数据)。下面开始ajax的初操作。我们使用jquery进行ajax开发。

  • 下载jquery

在官网下载jquery


下载jquery

导入到项目静态资源目录


项目结构

下面展示一个简单的ajax小demo:
前端

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
    <script src="${pageContext.request.contextPath}/static/js/jQuery3.60.js"></script>

<%--    jquery成功导入后,$就指代jQuery,这两个写谁都行--%>
    <script>
      function a(){
        $.post({
          url:"${pageContext.request.contextPath}/a1",
          data:{"name":document.getElementById("username").value},
          success:function (data){
            alert(data);
          }

        });
      }
    </script>
  </head>
  <body>

<%--  失去焦点的时候,发起一个请求到后端--%>
<span>用户名: </span>
  <input type="text" id="username" onblur="a()">




  </body>
</html>

后端控制器:

//使返回的数据为字符串
@RestController
public class AjaxController {

    @RequestMapping("/hello")
    public String test(){
        return "hello";
    }

    @RequestMapping("/a1")
    public String a1(String name, Model model){
        System.out.println("a1:name==> " + name);
        if ("yangsir".equals(name)){
            return "true";
        }else{
            return "false";
        }
    }
    
}

在文本框中输入用户名字,如果名字为"yangsir"返回true,否则返回false。

ajax异步加载数据

编写请求,使得返回json数据:

    @RequestMapping(value = "/a2", produces="application/json;charset=UTF-8")
    public List<User> a2(){
        List<User> users = new ArrayList<User>();
        //添加数据
        users.add(new User("yangsir",15,"男"));
        users.add(new User("yangsir",18,"女"));

        return users;

    }

里面的user类自己编写一下吧,很简单。这里有个坑需要注意,虽然springMVC的驱动和默认是可以处理返回json数据的(默认jackson),但是一定得导入jackson的包才行。导入相关依赖:

    <dependencies>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.0</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>


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

编写前端:
test2.jsp:

<%--
  Created by IntelliJ IDEA.
  User: yangsir
  Date: 2022/2/25
  Time: 9:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="${pageContext.request.contextPath}/static/js/jQuery3.60.js"></script>
    <script>
        function a(){
            $.post("${pageContext.request.contextPath}/a2",function (data){
                var html = "";
                for (let 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);
                $("#content").html(html);

            })
        }
    </script>

</head>
<body>

<input type="button" value="加载数据" id="btn" onclick="a()">

<table>
    <tr>
        <td>姓名</td>
        <td>年龄</td>
        <td>性别</td>
    </tr>
    <tbody id="content">

    </tbody>
</table>

</body>
</html>

该页面的功能是使用他变了显示从"/a2"处获取到的数据。
效果展示:

image.png

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • jQuery 部分: JavaScript 是客户端脚本的标准语言,而 jQuery 使得编写 JavaScrip...
    IT届彭于晏阅读 1,319评论 1 11
  • Ajax在前端开发中有着举足轻重的地位,关于Ajax的使用和注意事项一直是一个重要的话题,借此机会,本文希望对Aj...
    grain先森阅读 1,522评论 4 55
  • 原文链接:https://segmentfault.com/a/1190000010832550 Ajax在前端开...
    一现_阅读 334评论 0 0
  • 1.工作当中会和后台交互吗? 那你能说说封装好的 ajax里的几个参数吗? url: 发送请求的地址。 type:...
    IT届彭于晏阅读 627评论 1 15
  • Ajax的基本概念及使用 同步&异步 同步:必须等待前面的任务完成,才能继续后面的任务; 异步:不受当前主要任务的...
    magic_pill阅读 1,973评论 0 5