Ajax笔记

Ajax

(asynchronous javascript and xml[异步请求 javascript xml])

传统请求

发起传统请求的方式

i.地址栏
ii.超级链接
iii.表单
iiii.javascript:location.href 函数

传统请求的问题

需要刷新页面才能等待结果进行后续操作。

异步请求

异步请求的特点

响应的内容不是新的页面,是一个页面的局部(字符串信息),所以用户在使用异步请求时,不需要等待响应,直接可以进行后续的操作

传统请求与异步请求的区别

响应内容

传统请求响应:新的页面 刷新页面
异步请求响应:页面的局部,字符串的信息

对于用户的操作

传统的请求:等待响应
异步的请求:不需要等待响应,用户可以直接进行后续操作

异步请求的开发

异步请求对象

javascript:XmlHttpRequest 对象 xhr
针对不同系列浏览器创建方式不同
Chrom|FF|safari

Var xhr = new XmlHttpRequest();

IE系

Var xhr = new ActionXObject(“Microsoft.XMLHTTP”);

xhr对象使用

i.创建xhr对象
ii.发送请求

xhr.open("get | post", url);

iii.如何传递数据

xhr.send(数据);

iiii.监听响应
xhr.readystate //检测是否完成

状态码状态
0xhr对象被创建,并没有调用send()方法
1xhr对象调用了send方法,但没有响应
2xhr对象调用了send方法,响应已经返回客户端
3响应解析
4响应解析完成可以使用

xhr.status //响应是否正确

状态码状态
404xhr对象被创建,并没有调用send()方法
500xhr对象调用了send方法,但没有响应
405xhr对象调用了send方法,响应已经返回客户端
200正确
xhr.onreadystatechange = function() {
    if (xhr.readystate == 4 && xhr.status == 200) {
        xhr.responseTest  //获得响应文本
        //Javascript中的DOM编程展示在页面中
    }
}

用户名校验开发实例:

<script type="text/javascript">
    function test1() {
        //获取用户名
        var input = document.getElementById("username");
        var username = input.value;
        //发送AJAX请求
        var xhr;
        if (window.XMLHttpRequest) {
            xhr = new XMLHttpRequest();
        } else {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
        //发送请求
        xhr.open("GET", "${pageContext.request.contextPath}/check/checkusername1?username="    + username);
        xhr.send(null);
        //监听响应

        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                //获取校验结果
                var message = xhr.responseText;
                //DOM提示信息
                var m = document.getElementById("message");
                m.innerHTML = message;
            }
        }
    }
</script>
<form action="">
用户名<input type="text" id="username" name="username" onblur="test1()" value="username">
<span id="message"></span>
<br /> 
密码<input type="password" name="password">
<br /> 
年龄<input type="text" name="age">
<br />
</form>

JSON协议串

本质

字符串

作用

在异构的编程体系中,进行数据的传输和交互

核心

对象形式

User {
    id = 1;
    userName = "hibiscidai";
    age = 20;
}
{"id":1,"userName":"hibiscidai","age":18}

集合形式

数组:

String [] names = {"xiaoming", "xiaozhu", "xiaogou"}
["xiaoming","xiaozhu","xiaogou"]

含有对象的集合

List <User>
[{"id":1,"userName":"hibiscidai","age":18},{"id":2,"userName":"xiaoming","age":20}]

内嵌对象

User {
    id = 1;
    userName = "hibiscidai";
    Address address;
    List<String> phone;
}
Address {
    city = "zhengzhou";
    street = "wenhualu";
}
{"id":1,"userName":"hibiscidai",{"city":"zhengzhou","street":"wenhualu"},["11111","2222","3333"]}

Map类型与对象的转换形式是一致的

Map<String, String> m = new HashMap<String, String>();
m.put("name1", "hibiscidai1");
m.put("name2", "hibiscidai2");
{"name2":"hibiscidai2","name1":"hibiscidai1"}

JSON协议串解析

异构体系中对象和集合与JSON串之间的转换
针对于java有jsonlib/gson(Google)/fastjson(ali)/jakenson(springmvc)
需要提前引入对应jar包

实际测试
用于本测试的对象
User.java | 省略setter和getter与构造方法

public class User {
    public String name;
    String phone;
    public int age;
    public Address address;
}

Address.java | 同User.java

public class Address {
    public String city;
    public String Street;
}

GSON(google)

java中的对象==》JSON串
@Test
    // java中的对象==》JSON串
    public void test1() {
        User user = new User("hibiscidai", "123456", 18, null);

        Gson gson = new Gson(); // 创建GSON对象
        String string = gson.toJson(user);
        System.out.println(string);
    }
{"name":"hibiscidai","phone":"123456","age":18}
java中的集合==》JSON串
@Test
    // java中的集合==》JSON串
    public void test2() {
        User user1 = new User("hibiscidai1", "1234561", 181, null);
        User user2 = new User("hibiscidai2", "1234562", 182, null);
        User user3 = new User("hibiscidai3", "1234563", 183, null);

        List<User> listUser = new ArrayList<User>(); // 创建List集合
        listUser.add(user1);
        listUser.add(user2);
        listUser.add(user3);

        Gson gson = new Gson(); // 创建GSON对象
        String string = gson.toJson(listUser);
        System.out.println(string);
    }
[{"name":"hibiscidai1","phone":"1234561","age":181},{"name":"hibiscidai2","phone":"1234562","age":182},{"name":"hibiscidai3","phone":"1234563","age":183}]
java中的内嵌对象==》JSON
@Test
    // java中的内嵌对象==》JSON
    public void test3() {
        Address addre = new Address("zhengzhou", "wenhualu");
        User user = new User("hibiscidai1", "1234561", 181, addre);

        Gson gson = new Gson(); // 创建GSON对象
        String string = gson.toJson(user);
        System.out.println(string);
    }
{"name":"hibiscidai1","phone":"1234561","age":181,"address":{"city":"zhengzhou","Street":"wenhualu"}}
java中的Map对象==》JSON
@Test
    // java中的Map对象==》JSON
    public void test4() {
        Map<String, String> maps = new HashMap<String, String>();
        maps.put("1", "hibiscidai");
        maps.put("2", "hibiscidai2");

        Gson gson = new Gson(); // 创建GSON对象
        String string = gson.toJson(maps);
        System.out.println(string);
    }
{"2":"hibiscidai2","1":"hibiscidai"}
JSON==》java中对象
@Test
    // JSON==》java中对象
    public void test5() {
        User user = new User("hibiscidai", "123456", 18, null);

        Gson gson = new Gson(); // 创建GSON对象
        String string = gson.toJson(user);

        User user2 = gson.fromJson(string, User.class); // json转对象
        System.out.println(user2);
    }
User [name=hibiscidai, phone=123456, age=18, address=null]

fastjson(ali)

对象>int>string

java中的对象==》JSON串
@Test
    // java中的内嵌对象==》JSON
    public void test3() {
        Address addre = new Address("zhengzhou", "wenhualu");
        User user = new User("hibiscidai1", "1234561", 181, addre);

        String string = JSON.toJSONString(user);
        System.out.println(string);
    }
{"age":18,"name":"hibiscidai","phone":"123456"}
java中的集合==》JSON串
@Test
    // java中的集合==》JSON串
    public void test2() {
        User user1 = new User("hibiscidai1", "1234561", 181, null);
        User user2 = new User("hibiscidai2", "1234562", 182, null);
        User user3 = new User("hibiscidai3", "1234563", 183, null);

        List<User> listUser = new ArrayList<User>(); // 创建List集合
        listUser.add(user1);
        listUser.add(user2);
        listUser.add(user3);

        String string = JSON.toJSONString(listUser);// 创建GSON对象
        System.out.println(string);
    }
[{"age":181,"name":"hibiscidai1","phone":"1234561"},{"age":182,"name":"hibiscidai2","phone":"1234562"},{"age":183,"name":"hibiscidai3","phone":"1234563"}]
java中的内嵌对象==》JSON
@Test
    // java中的内嵌对象==》JSON
    public void test3() {
        Address addre = new Address("zhengzhou", "wenhualu");
        User user = new User("hibiscidai1", "1234561", 181, addre);

        String string = JSON.toJSONString(user);
        System.out.println(string);
    }
{"address":{"Street":"wenhualu","city":"zhengzhou","street":"wenhualu"},"age":181,"name":"hibiscidai1","phone":"1234561"}
java中的Map对象==》JSON
@Test
    // java中的Map对象==》JSON
    public void test4() {
        Map<String, String> maps = new HashMap<String, String>();
        maps.put("1", "hibiscidai");
        maps.put("2", "hibiscidai2");

        String string = JSON.toJSONString(maps);
        System.out.println(string);
    }
{"2":"hibiscidai2","1":"hibiscidai"}
JSON==》java中对象
@Test
    // JSON==》java中对象
    public void test5() {
        User user = new User("hibiscidai", "123456", 18, null);

        Gson gson = new Gson(); // 创建GSON对象
        String string = gson.toJson(user);

        User user2 = JSON.parseObject(string, User.class); // json转对象
        System.out.println(user2);
    }
User [name=hibiscidai, phone=123456, age=18, address=null]

DOM编程

<script type="text/javascript">
    function test1() {
        //创建异步请求对象
        var xhr;
        if (window.XMLHttpRequest) {
            xhr = new XMLHttpRequest();
        } else {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
        //发送异步请求
        //Struts2请求
        xhr.open("GET", "${pageContext.request.contextPath}/user/selectAll");
        xhr.send(null);
        //监听响应
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                //把JSON串转化为JS数组
                var users = JSON.parse(xhr.responseText);
                //获取table标签对象
                var table = document.getElementById("table");
                for ( var i = 0; i < users.length; i++) {
                    //DOM编程
                    //创建行
                    var tr = document.createElement("tr");
                    //创建第一个单元格
                    var td = document.createElement("td");

                    //文本填充第一个单元格(列)
                    var id = document.createTextNode(users[i].id);
                    td.appendChild(id);//第一个单元格填充内容
                    tr.appendChild(td);//第一个单元行填充单元格

                    //第二个单元格(列)
                    var td1 = document.createElement("td");
                    var username = document.createTextNode(users[i].username);
                    td1.appendChild(username);
                    tr.appendChild(td1);

                    //第二个单元格(列)
                    var td2 = document.createElement("td");
                    var password = document.createTextNode(users[i].password);
                    td2.appendChild(password);
                    tr.appendChild(td2);

                    //将行列接入表格
                    table.appendChild(tr);
                }
            }
        }
    }
</script>

对于前台操作的表格

<body onload="test1()">
<table id="table" border="1px" cellspading="0px" cellpadding="0px"
        width="80%">
        <tr bgcolor="red">
            <td>用户ID</td>
            <td>用户名</td>
            <td>密码</td>
        </tr>
</table>
</body>

JSON转js对象或数组

(浏览器内置Jquery,Ext,vue,angluar js)浏览器内置对象,后续使用js框架

JSON.parse(jsonString)
–>js对象
–>ja数组

function test1() {
    /*
    //定义JSON串
    var u = '{"username":"hibiscidai","age":18}';
    //吧json串转化为js对象
    var user = JSON.parse(u);
    alert(user.username);
    alert(user.age);
    */
    //定义JSON串
    var s = '["hibiscidai","dai","mujin"]';
    var ss = JSON.parse(s);
    for (var i = 0; i < ss.length; i++) {
        alert(ss[i]);
    }
}

AJAX+Struts2+Mybatis整合

AJAX+Struts2+Mybatis整合

案例:显示所有用户的信息

显示所有用户的信息
selectAllAction

public String selectAll() {
    // 调用业务
    UserService us = new UserServiceImpl();
    List<User> users = us.selectAllUsers();
    // JSON串的转换
    String jsonString = JSON.toJSONString(users);
    HttpServletResponse response = ServletActionContext.getResponse();
    response.setCharacterEncoding("UTF-8");
    PrintWriter out = null;
    try {
        out = response.getWriter();
        out.print(jsonString);
    } catch (IOException e) {
        e.printStackTrace();
    }
    out.close();
    return null;
}

前台表单

<body onload="test1()">
    <table id="table" border="1px" cellspading="0px" cellpadding="0px" width="80%">
        <tr bgcolor="red">
            <td>用户ID</td>
            <td>用户名</td>
            <td>密码</td>
        </tr>
    </table>
</body>

Ajax函数

<script type="text/javascript">
    function test1() {
        //创建异步请求对象
        var xhr;
        if (window.XMLHttpRequest) {
            xhr = new XMLHttpRequest();
        } else {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
        //发送异步请求
        xhr.open("GET", "${pageContext.request.contextPath}/user/selectAll");
        xhr.send(null);
        //监听响应
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                //把JSON串转化为JS数组
                var users = JSON.parse(xhr.responseText);
                //获取table标签对象
                var table = document.getElementById("table");
                for ( var i = 0; i < users.length; i++) {
                    //DOM编程
                    //创建行
                    var tr = document.createElement("tr");
                    //创建第一个单元格
                    var td = document.createElement("td");
                    //文本填充第一个单元格
                    var id = document.createTextNode(users[i].id);
                    td.appendChild(id);
                    tr.appendChild(td);

                    var td1 = document.createElement("td");

                    var username = document.createTextNode(users[i].username);
                    td1.appendChild(username);
                    tr.appendChild(td1);

                    var td2 = document.createElement("td");

                    var password = document.createTextNode(users[i].password);
                    td2.appendChild(password);
                    tr.appendChild(td2);

                    table.appendChild(tr);
                }
            }
        }
    }
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值