Java学习路线-47:Ajax学习XMLHttpRequest、XStream、json-lib(1)

简介: Java学习路线-47:Ajax学习XMLHttpRequest、XStream、json-lib

课时1 1.ajax简介(异步与同步)

asynchronous javascript and xml

异步js和xml


1、异步交互和同步交互

同步 发送,等待 整个页面刷新

异步 发送,不等待 局部刷新


示例:异步刷新


<button id="btn">点击</button> 
<h2 id="text"></h2>
<script>
// 文档加载完成后马上执行
window.onload = function(){
    let btn = document.getElementById("btn");
    // 给btn注册点击事件监听
    btn.onclick = function(){
        let text = document.getElementById("text");
        text.innerHTML= "hello!";
    }
}
</script>


课时2 2.异步和同步交互图

数据格式

text、xml、json

同步:


请求 ->

响应 <-


请求 ->

响应 <-



异步:


请求 ->

请求 ->


响应 <-

响应 <-



课时3 3.ajax的应用场景和优缺点

优点:

异步交互,增强用户体验

性能:只需要响应部分内容,服务器压力减少


缺点:

ajax不能应用在所有场景

ajax增多了对服务器的请求,给服务器增加压力


课时4 4.ajax四步操作

1、获取XMLHttpRequest


// 大多数浏览器
var xmlHttp = new XMLHttpRequest();
// IE6.0
var xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
// IE<=5.5
var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
1


编写一个创建XMLHttpRequest对象的函数


function createXMLHttpRequest(){
    try{
        // 大多数浏览器
        return new XMLHttpRequest();
    }catch(e){
        try{
            // IE6.0
            new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
            try{
                // IE<=5.5
                new ActiveXObject("Microsoft.XMLHTTP");
            }catch(e){
                console.log("浏览器版本太老了!"); 
                throw e;
            }   
        }   
    }
}




2、连接服务器


xmlHttp.open("GET", "/url", true);

// 参数:请求方式,请求url,是否为异步


3、发送请求


xmlHttp.send(null);

// 参数:请求体内容,如果是GET,必须给出null,不然FireFox可能不发送


4、注册事件监听器

(1)5个状态:


0 刚创建

1 请求开始,调用open

2 请求发送完成 调用send

3 服务器开始响应

4 服务器响应结束



(2)获取响应内容


// 获取状态
var state = xmlHttp.readyState; 
// 得到服务器响应状态码 200, 404, 500
var status = xmlHttp.status;
// 得到服务器响应内容 
var content = xmlHttp.responseText; // 文本格式
var content = xmlHttp.responseXml; // xml格式,document对象



(3)注册监听事件


xmlHttp.onreadystatechange = function(){
    // 双重判断 xmlHttp状态为服务器响应结束,服务器状态响应结束
    if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
        var text = xmlHttp.responseText;
    }
}



课时5 5.ajax第一例:helloworld

为了便于测试,服务端使用Python语言

服务端 hello.py


# pip install flask, flask-cors
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app, supports_credentials=True)
@app.route("/")
def index():
    return "<h2>Hello!</h2>"
if __name__ == '__main__':
    app.run()



客户端 demo.html


<button id="btn">点击</button> 
<h2 id="text"></h2>
<script>
// 获取XMLHttpRequest对象
function createXMLHttpRequest(){
    try{
        // 大多数浏览器
        return new XMLHttpRequest();
    }catch(e){
        try{
            // IE6.0
            new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
            try{
                // IE<=5.5
                new ActiveXObject("Microsoft.XMLHTTP");
            }catch(e){
                console.log("浏览器版本太老了!"); 
                throw e;
            }   
        }   
    }
}
// 文档加载完成后马上执行
window.onload = function(){
    let btn = document.getElementById("btn");
    // 给btn点击事件注册监听
    btn.onclick = function(){
        let xmlHttp = createXMLHttpRequest();
        xmlHttp.open("GET", "http://127.0.0.1:5000/", true);
        xmlHttp.send();
        xmlHttp.onreadystatechange = function(){
            // 双重判断 xmlHttp状态为服务器响应结束,服务器状态响应结束
            if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
            var text = xmlHttp.responseText;
            let h2 = document.getElementById("text");
            h2.innerHTML= text;
        }
}
    }
}
</script>




6.ajax第二例:发送POST请求

多添加一个请求头


// 设置请求头
xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// 发送请求体
xmlHttp.send("username=Tom&age=23");


服务端接收函数 hello.py



@app.route("/post", methods=['POST'])
def post():
    username = request.form.get("username")
    age = request.form.get("age")
    return f"<h2>username: {username}, age: {age}</h2>"



客户端修改 demo.html


xmlHttp.open("POST", "http://127.0.0.1:5000/post", true);

xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

xmlHttp.send("username=Tom&age=23");


课时7 7.ajax第三例:用户名是否已被注册

客户端要求:

1、注册表单

2、监听用户名文本框失去焦点onblur事件

3、获取文本框内容,通过ajax异步发送给服务器

4、如果为1 显示:用户名已被注册

如果为0 什么都不显示


<meta charset="utf-8">
<style>
    #errorText {
        color: red;
    }
</style>
<form action="">
    <input type="text" name="username" id="username">
    <span id="errorText"></span>
</form>
<script>
    // 获取XMLHttpRequest对象
    function createXMLHttpRequest() {
        try {
            // 大多数浏览器
            return new XMLHttpRequest();
        } catch (e) {
            try {
                // IE6.0
                new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    // IE<=5.5
                    new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {
                    console.log("浏览器版本太老了!");
                    throw e;
                }
            }
        }
    }
    // 文档加载完成后马上执行
    window.onload = function () {
        let username = document.getElementById("username");
        // 失去焦点注册事件监听
        username.onblur = function () {
            let xmlHttp = createXMLHttpRequest();
            xmlHttp.open("POST", "http://127.0.0.1:5000/validate", true);
            xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            xmlHttp.send("username=" + username.value);
            xmlHttp.onreadystatechange = function () {
                // 双重判断 xmlHttp状态为服务器响应结束,服务器状态响应结束
                if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                    var text = xmlHttp.responseText;
                    let errorText = document.getElementById("errorText");
                    if (text == '1') {
                        errorText.innerHTML = "用户名已被注册";
                    } else {
                        errorText.innerHTML = "";
                    }
                }
            }
        }
    }
</script>




服务端要求:

1、获取客户端传递的用户名参数

2、判断是否为demo,是返回1,否返回0


@app.route("/validate", methods=['POST'])
def validate():
    username = request.form.get("username")
    if username == "demo":
        return "1"
    else:
        return "0"
相关文章
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
196 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
221 1
|
6月前
|
XML JSON 前端开发
XMLHttpRequest细节介绍与Ajax实践
XHR和AJAX结合起来,就能在不刷新页面的情况下,实现数据的神不知鬼不觉的交换,让用户体验如同吃了润滑油的滑梯。简洁而高效,这就是现代web开发的一个闪光点。
131 12
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
263 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
1297 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
750 0
在Java中处理JSON数据:Jackson与Gson库比较
|
JSON JavaScript 前端开发
《进阶篇第7章》学习vue中的ajax之后,练习vue案例-github用户搜索案例
《进阶篇第7章》学习vue中的ajax之后,练习vue案例-github用户搜索案例
133 0
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
515 1
|
存储 JSON 前端开发
除了闹过腥风血雨的fastjson,你还知道哪些Java解析JSON的利器?(2)
除了闹过腥风血雨的fastjson,你还知道哪些Java解析JSON的利器?
419 0
|
JSON JavaScript 前端开发
除了闹过腥风血雨的fastjson,你还知道哪些Java解析JSON的利器?(1)
除了闹过腥风血雨的fastjson,你还知道哪些Java解析JSON的利器?
224 0
除了闹过腥风血雨的fastjson,你还知道哪些Java解析JSON的利器?(1)