• AJAX介绍


    目录

    AJAX介绍: 

    JS原生的ajax:

    XMLHttpRequest 对象

    1.向后台发送请求

    2. 设置请求的方式和url地址

    3. 发送请求(请求体,只有post有请求体)

    4.指定xhr状态变化的处理函数

    JQuery的AJAX

    简易发送GET请求

    简易发送POST请求

    表单数据如何进行提交呢:

    JSON

    Vue的AJAX


    我们一般发送请求的方式有四种:

    1. 地址栏
    2. a标签
    3. form表单
    4. location.href或window.open()

    但是以上请求都会实现跳转页面等操作。那我们要想有一个既能提交数据,又能不跳转页面并更新网页内容,有没有可能呢,接下来我们学习的AJAX就拥有这个功能

    AJAX介绍: 

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

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

    AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

    AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。

    异步:整个页面不会全部刷新,只有某个局部在刷新eg:验证用户名是否存在

    注意

    1:使用ajax发送请求,页面是 不可以通过后台跳转! ! !

          如果需要跳页面,也是通过我们前端的JS来跳转,不可能通过servlet跳转

    2:ajax和form表单不能同时使用。他们之间是相互冲突的。

    ajax:不跳页面。

    form:一定会跳。

    JS原生的ajax:

    XMLHttpRequest 对象

    所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。

    XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

    使用方式:

    1.向后台发送请求

    let xhr=new XMLHttpRequest();

    2. 设置请求的方式和url地址

    可以设置请求是get或post,url地址可以传值

    1. xhr.open("post","valid.do")
    2. //
    3. xhr.open("get","valid.do?username="+username);

    3. 发送请求(请求体,只有post有请求体)

    Post请求需要配置请求头信息

    1. //post请求:发送请求头,send发送请求体
    2. xhr.setRequestHeader("Content-type","application/x-ww-form-urlencoded")
    3. xhr.send("username="+username+"&password=123456")
    4. //get请求:没有请求体,设置null
    5. xhr.send(null);

    4.指定xhr状态变化的处理函数

    .onreadystatechange=function(){}

    通过responseText获取对应的响应体

    1. xhr.onreadystatechange=function(){
    2. if(this.readyState == 4){
    3. //通过xhr的responseText获取到对应的响应体
    4. console.log(this.responseText);
    5. }
    6. }

    我们看到有一个判定条件:this.readyState==4

    这个是怎么判定的,为什么要等于四呢?

    readyState是XMLHttpRequest对象的一个属性,用来标识当前XMLHttpRequest对象处于什么状态。readyState总共有5个状态值,分别为0~4,每个值代表了不同的含义。

    0:xhr被创建,方法未被调用。对象还没完成初始化

    1:open被调用,开始发送请求,建立连接

    2:send被调用,发送完成,可以获取状态行和响应头

    3:可以拿到响应体,响应体加载中,进行解析

    4:响应体下载完成,响应结束,可以直接使用responseText获取内容

    JQuery的AJAX

    1. $(function(){
    2. $("#va").click(function(){
    3. let username = $("#username").val();
    4. // 完整写法
    5. $.ajax({
    6. url:"va.do",
    7. type:"post",
    8. //以键值对存储
    9. data:{"username":username,"password":password},
    10. //成功了会走这个
    11. success:function(res){
    12. console.log(res);
    13. },
    14. //失败了会走这个
    15. error:function(res){
    16. console.log(res);
    17. }
    18. })
    19. })
    20. })

    简易发送GET请求

    data是后台响应回来的响应体

    1. $.get("valid.do?username=" + username,function (data) {
    2. //传回来的参数是data
    3. });

    简易发送POST请求

    1. $.post("valid.do","username=" + username,function (data) {
    2. //传回来的参数是data
    3. });

    表单数据如何进行提交呢:

    利用formData构建一个表单数据对象:

    let formData = new FormData();

    formData.append("username",username);

    formData.append("password",password);

    之后在data里写formData;{data:formData,}

    JSON

    json是JavaScript对象表示法,用来传递对象的,毕竟单纯的js是不可能有对象这个概念的

    语法:

    1. [
    2. { "name":"pike" , "url":"www.dream.com" },
    3. { "name":"yeah" , "url":"www.google.com" },
    4. { "name":"aoli" , "url":"www.baidu.com" }
    5. ];

    对象:

    { "name":"potato", "age":10, "sex":null }

    Vue的AJAX

    在vue里对原生ajax进行了封装:axios;

    需要导包:axios.min.js

    axios发送get请求:
    请求中如果有参数,还是一个默认的以文档里的形式发送,和之前的任何一种请求方式没有任何区别。
    axios发送post请求:
    请求中如果有参数,会把post请求的请求体转成json串,然后再发给后台。 

    1. const app = new Vue({
    2. el:"#app",
    3. data:{},
    4. methods:{
    5. post(){
    6. // 发送post请求
    7. axios.post("vue.do",{
    8. "username":"xiaoqiang",
    9. "password":"000000"
    10. }).then(function(response){
    11. console.log(response);
    12. });
    13. },
    14. get(){
    15. // 发送get请求
    16. axios.get("vue.do?username=admin&password=666666").then(function(response){
    17. console.log(response);
    18. console.log(response.data);
    19. }).catch(function(err){
    20. console.log(err);
    21. });
    22. }
    23. },
    24. });

    但是在后台:

    request.getParameter()方法只能接收默认的文档流中的参数,接不了json串

    怎么获取json传过来的串呢:

    一:从request中获取了一个流,缓冲字符输入流
    1、get请求,后台没有对应的对象来封装,不能有私密数据。
    2、post请求,后台都是有对象跟着的。username,password-----User
                                              id,name,age,gender,email-----------Student

    1. BufferedReader reader = request.getReader();
    2. String line = reader.readLine();

    二:封装对象的前提:
    json串中的数据的key和对象的属性名要一致。是根据set方法的名封装的。

    User user = JSON.parseObject(line, User.class);
  • 相关阅读:
    责任链模式之Tomcat Filter应用
    redis的性能管理
    大转盘流程
    Python自动化测试面试题
    np.concatenate
    学 Python 这么久,终于把类函数 & 成员函数 & 静态函数给整明白了!
    【鸿蒙学习笔记】交互事件
    Yolov5 export.py实现onnx模型的导出
    firefox 护眼模式 插件 Night Eye - Dark mode
    Flappy bird项目
  • 原文地址:https://blog.csdn.net/weixin_49627122/article/details/126637241