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"
相关文章
|
1月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
39 1
|
5天前
|
JSON JavaScript 前端开发
《进阶篇第7章》学习vue中的ajax之后,练习vue案例-github用户搜索案例
《进阶篇第7章》学习vue中的ajax之后,练习vue案例-github用户搜索案例
10 0
|
2月前
|
前端开发 JavaScript Java
Ajax进行异步交互:提升Java Web应用的用户体验
Ajax 技术允许在不重载整个页面的情况下与服务器异步交换数据,通过局部更新页面内容,极大提升了 Java Web 应用的响应速度和用户体验。本文介绍 Ajax 的基本原理及其实现方式,包括使用 XMLHttpRequest 对象发送请求、处理响应数据,并在 Java Web 应用中集成 Ajax。此外,还探讨了 Ajax 如何通过减少页面刷新、实时数据更新等功能改善用户体验。
62 3
|
2月前
|
存储 JSON 测试技术
Python中最值得学习的第三方JSON库
Python中最值得学习的第三方JSON库
|
4月前
|
前端开发 Java 关系型数据库
Java后台学习路线
Java后台学习路线
53 5
|
3月前
|
Java
图解java工程师学习路线
图解java工程师学习路线
209 0
|
3月前
|
前端开发 JavaScript API
js【详解】ajax (含XMLHttpRequest、 同源策略、跨域、JSONP)
js【详解】ajax (含XMLHttpRequest、 同源策略、跨域、JSONP)
48 0
|
3月前
|
JSON JavaScript 前端开发
|
4月前
|
数据采集 Web App开发 前端开发
技术心得记录:如何用JAVA爬取AJAX加载后的页面(转载)
技术心得记录:如何用JAVA爬取AJAX加载后的页面(转载)
|
5月前
|
JSON 前端开发 JavaScript
Ajax 学习总结
这是一个关于Ajax学习的总结,包括导入Ajax包、异步请求和表单验证。示例展示了如何使用jQuery进行Ajax请求,从后台获取并显示数据,同时提到了Json乱码问题的解决方法和表单数据的前后端交互。还给出了表单验证的简单示例,通过Ajax实时校验用户名。
49 2