初始Ajax(二)

87 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第十一天,点击查看活动详情

2.使用POST方式实现Ajax

  • POST方式实现的Ajax与GET方式类似,只是方法名不同,为$.post()

3.使用通用方式实现Ajax

  • 通用的方式是使用$.ajax()方法来实现Ajax

  • 上述的GET和POST方式使用到的方法都是通过封装了这个$.ajax()方法来实现

  • 语法

    $.ajax({name:value,name:value....})
    
    • ajax方法的参数是一对{}包起来的键值对
  • 该方法的常用参数(键)如下

    参数说明
    url请求的路径
    async是否异步,true或false,默认为true
    data发送到服务器的数据
    type请求的方式,POST或GET,默认是GET
    dataType预期的服务器响应的数据类型(xml,html,text,script,json,jsonp)
    success(result,status,xhr)请求成功是执行的方法
    error(xhr,status,error)请求失败时执行的方法
  • 范例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Ajax练习</title>
    </head>
    <body>
        <label for="username">姓名</label>
        <input type="text" id="username">
        <label for="password">密码</label>
        <input type="password" id="password">
        <input type="button" id="btn" value="登录">
        <div id="div"></div>
    </body>
    <script src="js/jquery-3.3.1.min.js"></script>
    <script>
        $("#btn").on("click",function(){
            let username = $("#username").val();
            let password = $("#password").val();
            $.ajax({
                url:"AjaxServlet",
                data:{
                    "username":username,
                    "password":password
                },
                dataType:"text",
                success:function(data){
                    $("#div").html(data);
                }
            });
        });
    </script>
    </html>
    
    @WebServlet("/AjaxServlet")
    public class AjaxServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String username = req.getParameter("username");
            String password = req.getParameter("password");
            resp.setContentType("text/html;charset=UTF-8");
            resp.getWriter().write("<h1>"+username+"</h1>");
            resp.getWriter().write("<h1>"+password+"</h1>");
        }
    ​
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    

三.JSON补充知识

  • JavaScript笔记中只基本了解了JSON

1.转换工具

  • Jackson:开源免费的JSON转换工具,通过Java封装好的一些jar工具包
  • 可以将Java对象或集合转换成JSON格式的字符串,也可以将JSON格式的字符串转换成Java对象
  • 需要引入相关jar包

2.常用类以及方法

  • 常用类

    类名说明
    ObjectMapperjackon工具包的核心类,提供一些方法实现json字符串和对象之间的转换
    TypeReference用于指定反序列化的对象类型
  • ObjectMapper常用方法

    方法名说明
    String writeValueAsString(Object obj)将Java对象转为json字符串
    T readValue(String json,Class valueType)将json字符串转为Java对象,用于对象类型为内置类型
    T readValue(String json,TypeReference valueType)将json字符串转为Java对象,用于对象类型为含有自定义类型数据的集合类

3.范例

User类:

public class User {
    private String name;
    private int age;
​
    public User(){}
​
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public int getAge() {
        return age;
    }
​
    public void setAge(int age) {
        this.age = age;
    }
​
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }
}

使用范例1:

@Test
public void test01() throws IOException {
    //将User对象转为json字符串
    User user = new User("张三",23);
    ObjectMapper objectMapper = new ObjectMapper();
    String s = objectMapper.writeValueAsString(user);
    System.out.println(s);
    //将json字符串转为User对象
    User user1 = objectMapper.readValue(s, User.class);
    System.out.println(user1);
}

使用范例2:

@Test
public void test02() throws IOException{
    //将Map对象转为json字符串
    HashMap<String,String> map = new HashMap<>();
    map.put("name","张三");
    map.put("gender","男");
    ObjectMapper objectMapper = new ObjectMapper();
    String s = objectMapper.writeValueAsString(map);
    System.out.println(s);
    //将json字符串转为Map对象
    HashMap<String,String> hashMap = objectMapper.readValue(s, HashMap.class);
    System.out.println(hashMap);
}

使用范例3:

@Test
public void test03() throws IOException{
    //将包含自定义对象的Map对象转为json字符串
    HashMap<String,User> map = new HashMap<>();
    map.put("1号",new User("张三",23));
    map.put("2号",new User("李四",24));
    ObjectMapper objectMapper = new ObjectMapper();
    String s = objectMapper.writeValueAsString(map);
    System.out.println(s);
    //将json字符串转为包含自定义对象的Map对象
    HashMap<String,User> hashMap = objectMapper.readValue(s,new TypeReference<HashMap<String,User>>(){});
    System.out.println(hashMap);
}

使用范例4:

@Test
public void test04() throws IOException{
    //将List对象转为json字符串
    ArrayList<String> list = new ArrayList<>();
    list.add("张三");
    list.add("李四");
    ObjectMapper objectMapper = new ObjectMapper();
    String s = objectMapper.writeValueAsString(list);
    System.out.println(s);
    //将json字符串转为List对象
    ArrayList<String> arrayList = objectMapper.readValue(s, ArrayList.class);
    System.out.println(arrayList);
}

使用范例5:

@Test
public void test05() throws IOException{
    //将含有自定义对象的List对象转为json字符串
    ArrayList<User> list = new ArrayList<>();
    list.add(new User("张三",23));
    list.add(new User("李四",24));
    ObjectMapper objectMapper = new ObjectMapper();
    String s = objectMapper.writeValueAsString(list);
    System.out.println(s);
    //将json字符串转为含有自定义对象的List对象
    ArrayList<User> arrayList = objectMapper.readValue(s,new TypeReference<ArrayList<User>>(){});
    System.out.println(arrayList);
}