ajax

作者: wqjcarnation | 来源:发表于2020-03-16 20:19 被阅读0次

https://www.w3school.com.cn/ajax/index.asp

概念

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

AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

特征和优点

1、异步请求
2、局部刷新

请求5步

第一步,创建XMLHttpRequest对象
第二步,注册回调函数
第三步,配置请求信息,open()
第四步,发送请求 send
第五步,创建回调函数

readdystate状态种类

0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪

status:
200: "OK"
404: 未找到页面

响应类型

responseText 获得字符串形式的响应数据。
responseXML 获得 XML 形式的响应数据。

简单实例

功能:完成用户注册时填写用户名后及时验证是否可用(用户名不允许重复)
前台:reg.jsp

body部分:

<form action="user/registerServlet" onsubmit="return checkForm()"
    method="post">
    用户名:<input type="text" id="username" name="username"
        onblur="checkuser()" /><span id="msg"></span><br> 密码:<input
        type="text" name="password" /><br> <input type="submit"
        value="提交" />
</form>

js

    <script>
        function checkuser() {
            let username = document.getElementById("username").value;
            //第一步,创建XMLHttpRequest对象 
            var xmlhttp;
            if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else {// code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            //第二步,注册回调函数
            xmlhttp.onreadystatechange =state_Change;
            //第三步,配置请求信息,open()
            xmlhttp.open("GET", "checkUserServlet?username=" + username, true);
            //第四步,发送请求  send
            xmlhttp.send();
            //第五步,创建回调函数
            function state_Change() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    document.getElementById("msg").innerHTML = xmlhttp.responseText;
                }
            }
        }
    </script>

后台checkUserServlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String username=request.getParameter("username");
    System.out.println(username);
    //此处应该去查询数据库,验证用户名是否重复
    response.getWriter().print("可以使用");
}

响应类型

responseText 获得字符串形式的响应数据。
responseXML 获得 XML 形式的响应数据。

响应xml形式:book.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <users>
        <user>
            <username>张三XML</username>
            <age>33</age>
        </user>
        <user>
            <username>李四XML</username>
            <age>34</age>
        </user>
    </users>

ajax

ajax-xml.html

    <html>
    <head>
    <script type="text/javascript">
        function loadXMLDoc() {
            var xmlhttp;
            var txt, x, i;
            if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else {// code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    // 获取返回的XML数据主体内容
                    var result = xmlhttp.responseXML.documentElement;
                    var users = result.getElementsByTagName("user");
                    //var users=result.children;
                    //alert(users);
                    for (var i = 0; i < users.length; i++) {
                        // 获取单个user
                        var user = users[i];
                        // 获取user的具体信息
                        var userName = user.getElementsByTagName("username")[0].childNodes[0].nodeValue;
                        var age = user.getElementsByTagName("age")[0].childNodes[0].nodeValue;
                        // 添加行
                        appendRow(userName, age);
                    }
                }
            }
            xmlhttp.open("GET", "user.xml", true);
            xmlhttp.send();
            
            // 添加新行
            
            function appendRow(username, age) {
                var ui = document.getElementById("userinfo");
                // 添加新行
                alert(ui.rows.length);
                var newRow = ui.insertRow(ui.rows.length);
                // 添加新的单元格
                newRow.insertCell(0).innerHTML = username;
                newRow.insertCell(1).innerHTML = age;
            }
        }
    </script>
    </head>
    
    <body>
        <h2>My Book Collection:</h2>
            <table id="userinfo">
            <thead>
                <tr>
                    <th>姓名</th>
                    <th>年龄</th>
                </tr>
            </thead>
        </table>
        <button type="button" onclick="loadXMLDoc()">获得用户列表</button>
    </body>
    </html>

返回json

eval()和JSON.parse
https://blog.csdn.net/u013238512/article/details/79259217

user.js

    [
        { username: "张三JSON", age: 33 },
         { username: "李四JSON", age: 32 }
    ]

ajax-json.html

    <html>
    <head>
    <script type="text/javascript">
        function loadXMLDoc() {
            var xmlhttp;
            var txt, x, i;
            if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else {// code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    result = xmlhttp.responseText;
                    //alert(result);
                    // 使用eval函数使返回的字符串变成js对象
                    var users = eval("(" + result + ")");
                    for (var i = 0; i < users.length; i++) {
                        // 获取单个user信息
                        var user = users[i];
                        // 此处已经知道user数据的格式,故可以直接使用
                        appendRow(user.username, user.age);
                    }
    
                }
            }
            xmlhttp.open("GET", "user.js", true);
            xmlhttp.send();
        }
        // 添加新行
    
        function appendRow(username, age) {
            var ui = document.getElementById("userinfo");
            // 添加新行
            var newRow = ui.insertRow(ui.rows.length);
            // 添加新的单元格
            newRow.insertCell(0).innerHTML = username;
            newRow.insertCell(1).innerHTML = age;
        }
    </script>
    </head>
    
    <body>
        <h2>My Book Collection:</h2>
        <table id="userinfo">
            <thead>
                <tr>
                    <th>姓名</th>
                    <th>年龄</th>
                </tr>
            </thead>
        </table>
        <button type="button" onclick="loadXMLDoc()">获得用户列表</button>
    </body>
    </html>

var users = eval("(" + result + ")"); 如果改成let users=JSON.parse(result);会报错
JSON.parse要求属性名也必须加双引号

user.js改成这样,都可以用了

    [
        { "username": "张三JSON", "age": 33 },
         { "username": "李四JSON", "age": 32 }
    ]

function state_Change(){
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        //响应成功后处理
        let result=xmlhttp.responseText;
        //获取主体内容
        //let users=eval("(" + result + ")");
        let users=JSON.parse(result);
        //alert(users);
        for (var i = 0; i < users.length; i++) {
            let user=users[i];
            // 添加行
            appendRow(user.username, user.age);
        }
    }
}

相关文章

  • AJAX

    主要内容: ajax 是什么、原生ajax 写法和jQuery ajax写法。 AJAX 是什么 ajax,即As...

  • JavaScript进阶知识点--AJAX及JSON

    AJAX 关于 AJAX 什么是 AJAX AJAX 的全称是 Asynchronous JavaScript a...

  • HTML5权威指南 | 第五部分 高级功能

    三十二、使用AJAX(上) Ajax起步: 使用Ajax事件: Ajax请求的错误处理: 中止Ajax请求: 三十...

  • ajax学习笔记

    Ajax学习笔记 Ajax简介 1. Ajax是什么? Ajax : Asynochronous javascri...

  • AJAX

    一、简介 AJAX菜鸟教程 什么是 AJAX ? AJAX = 异步 JavaScript 和 XML。 AJAX...

  • js之AJAX复习

    异步交互和同步交互 什么是Ajax? Ajax的工作原理。 Ajax包含的技术: Ajax的缺陷: Ajax的核心...

  • 复习jQuery - ajax

    jQuery ajax - ajax() 方法 $.ajax({ url:'oo.php', ...

  • jQuery中Ajax请求的使用和四个步骤示例

    ajax() 方法用于执行 AJAX(异步 HTTP)请求,所有的 jQuery AJAX 方法都使用 ajax(...

  • ajax

    1、什么是ajax? 2、ajax的原理 3、ajax的核心对象 4、ajax的优点: ajax的缺点: 被jqu...

  • ajax

    Ajax 1 - 请求纯文本 Ajax 2 - 请求JSON数据 Ajax 3 - 请求Github接口 Ajax...

网友评论

      本文标题:ajax

      本文链接:https://www.haomeiwen.com/subject/rapoehtx.html