ajax学习记录

 

尝试将笔记记录一哈,有很多不足谅解

具体内容参考视频学习:https://edu.aliyun.com/roadmap/java

目录

02-Ajax篇

01- 同步与异步

02- 同步 & 异步(2)

03- Ajax的应用场景和优缺点

04- ajax 四步操作(发送异步请求)

05- hello world

06- 发送post 请求

07- 用户名是否存在?

08- xml

09- 省市联动:


02-Ajax篇

01- 同步与异步

Ajax:(asynchronous javascript and xml ) 异步的jsxml

异步交互和同步交互:

同步:

发一个请求,等待服务器响应结束,然后发出第二个请求,等待时间就是一个字“卡”!

刷新的是整个页面;

异步:

发一个请求后,无需等待服务器的响应,然后就可以发出第二个请求 !

可以使用 js 接受雾浮起的响应,然后使用 js 来局部刷新!

<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>ajax_learning</title>
    <script type="text/javascript">
        window.onload = function () {
            var btn = document.getElementById("btn");
            btn.onclick = function () {
                var h1 = document.getElementById("h1");
                h1.innerHTML="successfully clicking, on my god !  ";
            }
        };
    </script>
</head>
<body>
    <button id="btn">click here</button>
    <h1 id="h1"></h1>
</body>
</html>

 

02- 同步 & 异步(2)

服务器给客户端的响应一般是整个页面,而 ajax 中的局部刷新,服务器响应的就不再是整个页面,而只是一串数据data;

  • text 纯文本

  • xml

  • json 由 js 提供的数据交互格式,在Ajax中最受欢迎!

03- Ajax的应用场景和优缺点

例如:文本框下面的关键字提示

增强了用户体验;

还有:

登录注册时,若用户名已存在,则回显 “用户名已存在”;

ajax优点:

  • 异步交互,增强了用户体验;

  • 性能,减轻服务器压力;

ajax缺点:

  • 不断向服务器(访问次数增多)发出请求,增加压力;区别优点,举例说明;

04- ajax 四步操作(发送异步请求)

  • 第一步(得到XMLHttpRequest):

大多数浏览器,都支持:var xmlhttp = new XMLHttpRequest () ;

少数:

  • IE6.0: var xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

  • IE5.5: var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

创建XMLHttpRequest 对象:

function createXMLHttpRequest(){
    try{
        return new XMLHttpRequest();
    }catch(e){
        try{
            return new ActiveXObject("Mszml2.XMLHTTP");
        }catch(e){
            try{
                return new ActiveXObject("Microsoft.XMLHTTP");
            }catch(e){
                alert("你确定你写对了嘛,还是用的啥浏览器啊?");
                throw e;
            }
        }   
    }
}
  • 第二步,打开与服务器的连接:

xmlHttp.open():用来打开与服务器的连接,选哟三个参数:

  • 请求方式:get & post

  • 请求的url:指定服务器端的资源:../ Aservlet; (e.g.)

  • 请求是否为异步:如果为 true,表示发送异步请求;

xmlHttp.open( "get", "url:../Aservlet", true );
  • 第三步:发布请求

xmlHttp.send(null):如果不给,可能造成某些浏览器无法发送;

  • 参数:就是请求体内容,如果是get 请求,必须给出 null。

  • 第四步:impotent

在xmlHttp对象的一个事件上注册监听器onreadystatechange

xmlHttp的五个状态

  • 0状态:刚创建,未调用open方法;

  • 1状态:未调用send方法;

  • 2状态:调用完了send方法;

  • 3状态:服务器开始响应,但不表示幸运结束;

  • 4状态:服务器响应结束;(*)

得到xmlHttp 对象的状态

  • var state = xmlHttp.readyState; // 可能为0,1,2,3,4

得到服务器响应的状态码:

var status = xmlHttp.status; // 200,404.500;

得到响应的内容:

var content = xmlHttp.responseText; // 得到服务器的响应的文本格式的内容;

var content = xmlHttp.responseXML; // 得到服务器响应的xml响应的内容: 是Document对象;

xmlHttp.onreadystatechange = function(){
    if(xmlHttp.readyState == 4 && xmlHttp.status ==  200){// 双重判断
        var text = xmlHttp.responseText;// 多使用 responseText;
    }
}

 

05- hello world

package Test.ajaxdemo;
​
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
​
public class AjaxServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("hello ajax");
        response.getWriter().print("response.get.helloAjax!!!clicking!");
    }
}
​
<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  To change this template use File | Settings | File Templates.
--%><!-- ajax02.jsp -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>ajax_learning</title>
    <script type="text/javascript">
        function createXMLHttpRequest(){//  创建异步对象
            try {
                return new XMLHttpRequest();
            }catch (e) {
                try {
                   return new ActiveXObject("Msxml2.XMLHTTP");
                }catch (e) {
                    try {
                        return new ActiveXObject("Microsoft.XMLHTTP");
                    }catch (e) {
                        alert("error!!!!!!!!!!!!!!");
                        throw e;
                    }
                }
            }
        }
        window.onload = function () {
            var btn = document.getElementById("btn");
            btn.onclick = function () {
                // 四步操作,得到响应在,回显;
                xmlHttp = createXMLHttpRequest();  // 01
                xmlHttp.open("get","<c:url value='/AjaxServlet'/>", true);  // 02 <c:url ...> 需要:
   <!-- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -->
                xmlHttp.send(null);  // 03
                xmlHttp.onreadystatechange = function() {
                    if(xmlHttp.readyState === 4 && xmlHttp.status === 200){
                        var h1 = document.getElementById("h1");
                        var text = xmlHttp.responseText;
                        h1.innerHTML = text;// get the text;
                    }
                }
            }
        };
    </script>
</head>
<body>
<button id="btn">click here</button>
<h1 id="h1"></h1>
</body>
</html>
​
<servlet><!-- web.xml -->
        <servlet-name>AjaxServlet</servlet-name>
        <servlet-class>Test.ajaxdemo.AjaxServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>AjaxServlet</servlet-name>
    <url-pattern>/ajaxServlet</url-pattern>
</servlet-mapping>

06- 发送post 请求

  • open ,设置请求头;

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

  • send: xmlHttp.send( "username=JasonCH&password=123" );

var xmlHttp = createXMLHttpRequest();
                xmlHttp.open("post","<c:url value="/validateUsernameServlet"/>", true);
                xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                xmlHttp.send("username="+userElem.value);
// 需要修改的地方;

07- 用户名是否存在?

package servlet;
​
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
​
public class validateUsernameServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //
        String username = request.getParameter("username");
        if(username.equalsIgnoreCase("JasonCH")){
            response.getWriter().print("1");
        }else{
            response.getWriter().print("0");
        }
    }
​
}
​
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  To change this template use File | Settings | File Templates.
--%>
<html>
<head>
    <title>ajax_learning</title>
    <script type="text/javascript">
        function createXMLHttpRequest(){//  创建异步对象
            try {
                return new XMLHttpRequest();
            }catch (e) {
                try {
                    return new ActiveXObject("Msxml2.XMLHTTP");
                }catch (e) {
                    try {
                        return new ActiveXObject("Microsoft.XMLHTTP");
                    }catch (e) {
                        alert("error!!!!!!!!!!!!!!");
                    }
                }
            }
        }
        window.onload = function () {
            var userElem = document.getElementById("usernameElem");
            userElem.onblur = function(){
                var xmlHttp = createXMLHttpRequest();
                xmlHttp.open("post","<c:url value="/validateUsernameServlet"/>", true);
                xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                xmlHttp.send("username="+userElem.value);
                xmlHttp.onreadystatechange = function(){
                    if(xmlHttp.readyState===4 && xmlHttp.status===200){
                        var text = xmlHttp.responseText;
                        var span = document.getElementById("errorSpan");
                        if(text === "1"){
                            span.innerText = "用户名已存在";
                        }else{
                            span.innerText = "";
                        }
                    }
                }
            }
        }
​
    </script>
</head>
<body>
    <h1>用户名是否存在:?</h1>
    <form action="" method="post">
        username:&nbsp;<input type="text" name="username" id="usernameElem" placeholder="username"><span id="errorSpan" style="color: red"></span>
        <br />
        password:&nbsp;<input type="password" name="password" id="pwd" placeholder="password">
        <br>
        <input type="submit" value="submit">
    </form>
</body>
</html>
​

08- xml

<script>
    var doc = xmlHttp.responseXML;
</script>

09- 省市联动:

利用xml 作为数据库存储 省市信息,通过ajax 实现局部更新操作;

China-xml:

<?xml version="1.0" encoding="UTF-8" ?>
<China>
    <province name="Beijing">
        <city>B_addr1</city>
        <city>B_addr2</city>
        <city>B_addr3</city>
    </province>
    <province name="Shanghai">
        <city>S_addr1</city>
        <city>S_addr2</city>
        <city>S_addr3</city>
    </province>
</China>

 

provinceServlet:

package servlet;
​
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
​
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
​
public class ProviceServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //
        try {
            SAXReader reader = new SAXReader();
            InputStream input = new FileInputStream(
                    new File("D:\\web前端开发\\JavaWeb_demo\\01_demo_\\src\\data\\China.xml")
            );
            Document doc = reader.read(input);
            List<Attribute> lsts_name = doc.selectNodes("//province/@name");//
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < lsts_name.size(); i++) {
                sb.append(lsts_name.get(i).getValue());
                if(i<lsts_name.size()-1){
                    sb.append(",");
                }
            }
            response.getWriter().print(sb);//
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}
​

CityServlet:

package servlet;
​
import org.dom4j.*;
import org.dom4j.io.SAXReader;
​
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
​
public class CityServlet extends HttpServlet {
​
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/xml;charset=utf-8");
        //
        try {
            SAXReader reader = new SAXReader();
            InputStream input = new FileInputStream(
                    new File("D:\\web前端开发\\JavaWeb_demo\\01_demo_\\src\\data\\China.xml")
            );
            Document doc = reader.read(input);
            //
            String province = request.getParameter("province");
            Element elem = (Element) doc.selectSingleNode("//province[@name='" + province + "']");//
            String xmlStr = elem.asXML();
            System.out.println(xmlStr);
            response.getWriter().print(xmlStr);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}
​

province&city_ajax05:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  To change this template use File | Settings | File Templates.
--%>
<html>
<head>
    <title>ajax_learning</title>
    <script type="text/javascript">
        function createXMLHttpRequest(){//  创建异步对象
            try {
                return new XMLHttpRequest();
            }catch (e) {
                try {
                    return new ActiveXObject("Msxml2.XMLHTTP");
                }catch (e) {
                    try {
                        return new ActiveXObject("Microsoft.XMLHTTP");
                    }catch (e) {
                        alert("error!!!!!!!!!!!!!!");
                    }
                }
            }
        }
        window.onload = function () {
            // province then city;
            var xmlHttp = createXMLHttpRequest();
            xmlHttp.open("get","<c:url value="/proviceServlet"/>",true);
            xmlHttp.send(null);// 无请求体;
            xmlHttp.onreadystatechange = function () {
                if(xmlHttp.readyState===4 && xmlHttp.status===200){
                    var text = xmlHttp.responseText;//
                    var pro_arr = text.split(",");
                    for(var i=0;i<pro_arr.length;i++){
                        var op = document.createElement("option");
                        op.value = pro_arr[i];
                        op.appendChild(document.createTextNode(pro_arr[i]));
                        //
                        document.getElementById("pro").appendChild(op);
                    }
                }
            };
            var proSelect = document.getElementById("pro");
            console.log(proSelect);
            proSelect.onchange = function () {
                // province then city;
                var xmlHttp = createXMLHttpRequest();
                xmlHttp.open("post","<c:url value="/cityServlet"/>",true);
                xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                xmlHttp.send("province=" + proSelect.value);
                xmlHttp.onreadystatechange = function () {
                    if(xmlHttp.readyState===4 && xmlHttp.status===200){
                        var citylst = document.getElementById("ct");
                        var options = citylst.getElementsByTagName("option");
                        while(options.length>1){
                            citylst.removeChild(options[1]);
                        }// end the while-> deleting the child node;
                        //
                        var doc = xmlHttp.responseXML;//
                        console.log(doc);
                        var city_elems = doc.getElementsByTagName("city");
                        console.log(city_elems);
                        for(var i=0;i<city_elems.length;i++){
                            var city_elem = city_elems[i];
                            var cityName;
                            if(window.addEventListener){
                                cityName = city_elem.textContent;// fireBox
                            }else{
                                cityName = city_elem.text;// IE and others;
                            }//
                            var op = document.createElement("option");
                            op.value = cityName;
                            op.appendChild(document.createTextNode(cityName));//
                            document.getElementById("ct").appendChild(op);//
                        }
                    }
                }
            }
        };
    </script>
</head>
<body>
    <h1>省市联动</h1>
    <hr/>
    <select name="province" id="pro">
        <option>===the province===</option>
    </select>
    <select name="city" id="ct">
        <option>===the city===</option>
    </select>
    
</body>
</html>
​
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!对于学习Ajax,我可以为您提供一些学习笔记。以下是一份简要的Ajax学习笔记,希望对您有所帮助: 1. 什么是Ajax? - Ajax全称为Asynchronous JavaScript and XML(异步JavaScript和XML),是一种用于创建交互式Web应用程序的技术。 - 它通过在后台与服务器进行数据交换,实现在不刷新整个页面的情况下更新部分页面内容。 2. Ajax的优点: - 异步处理:可以在后台发送和接收数据,而无需刷新整个页面。 - 提高用户体验:通过部分更新页面内容,可以提供更快的响应时间和更流畅的用户体验。 - 减轻服务器负担:只更新需要的部分内容,减少了不必要的数据传输和服务器负载。 3. Ajax的基本原理: - 使用XMLHttpRequest对象向服务器发送请求,并接收响应。 - 通过JavaScript在前端处理响应数据。 - 更新页面内容,以显示最新的数据。 4. Ajax的核心技术: - XMLHttpRequest对象:用于与服务器进行数据交换。 - JavaScript:用于处理响应数据和更新页面内容。 - XML或JSON:用于传输数据格式。 5. Ajax的使用步骤: - 创建XMLHttpRequest对象。 - 定义请求类型、URL和是否异步。 - 发送请求并接收响应。 - 处理响应数据并更新页面内容。 6. 常见的Ajax框架和库: - jQuery:一个流行的JavaScript库,提供了简化Ajax开发的方法和函数。 - Axios:一个基于Promise的HTTP客户端,用于浏览器和Node.js。 - Fetch API:一种用于发送和接收网络请求的新标准。 这只是Ajax学习的一些基本概念和步骤,您可以进一步深入学习Ajax的相关知识和实践。希望这些笔记对您有所帮助!如有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J.CH.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值