异步请求(Ajax,axios,json)

这篇具有很好参考价值的文章主要介绍了异步请求(Ajax,axios,json)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

同步/异步请求

表单(前端)向后端发送请求,属于同步请求

同步: 发一个请求, 给一个回应, 会用回应的内容覆盖掉浏览器中内容,这样会打断前端其他的正常操作,在现在的前端中,显得不太友好。

异步: 不同步 前端正常输入时,可以同时与后端进行交互,后端响应的数据不会影响前端正常操作.

可以使用一个js中提供的对象,向后端发送请求, 服务器响应的内容会被js对象接收。然后在js中,用接收到的内容局部的更新网页,这样整个过程页面不会出现刷新,覆盖操作,不会打断页面的正常操作。现在的前后端交互技术,基本都是基于Ajax的异步交互技术

现在的前后端交互技术,基本都是基于Ajax的异步交互技术

Ajax 阿贾克斯 异步交互技术

Ajax 全称为:“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML),使用 Ajax,可以无刷新状态更新页面,并且实现异步提交,提升了用户体验。

Ajax其实质是利用浏览器提供的一个特殊的对象(XMLHttpRequest)异步地向服务器发送请求,服务器返回部分数据,浏览器让你去利用这些数据对页面做部分的更新,整个过程,页面无刷新,不打断用户的操作。

创建XMLHttpRequest对象

XMLHttpRequest对象:发送请求到服务器并获得返回结果

浏览器都建了XMLHttpRequest 对象,通过一行简单的JavaScript 代码,我们就可以创建 XMLHttpRequest 对象。 new XMLHttpRequest();

JavaScript对象XMLHttpRequest是整个Ajax技术的核心,它提供了异步发送请求的能力

常用方法:

异步请求(Ajax,axios,json),java,ajax,json,servlet,Powered by 金山文档

常用属性

  • onreadystatechange:事件,指定回调函数

  • readystate: XMLHttpRequest的状态信息

  • responseText:获得响应的文本内容

Get方式提交:

  • xmlhttp.open("GET" , "testServlet?name= "+userName,true);

  • xmlhttp.send();

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>
            function checkAccount(account){
                var httpobj=new XMLHttpRequest();
                httpobj.open("get","http://127.0.0.1:8080/webBack/reg?account="+account,true);
                httpobj.send();
                httpobj.onreadystatechange=function(){
                    //接收后端的响应数据
                    document.getElementById("aid").innerHTML=httpobj.responseText;//存在一个问题,浏览器默认不让前端8848接收来自其他服务器的响应数据
                }
            }
        </script>
    </head>
    <body>
        <form action="http://127.0.0.1:8080/webBack/reg" method="post">
            账号:<input type="text" name="account" value="" onblur="checkAccount(this.value)"/>
            <span id="aid"></span><br />
            密码:<input type="text" name="password" value=""/><br/>
        </form>
    </body>
</html>
package servlet;
public class RegServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String account=req.getParameter("account");
        resp.setHeader("Content-Type","text/html;charset=utf-8");//设置啊应义
        if(account.equals("admin")){
            resp.getWriter().print("账号已经被注册");
        }else{
            resp.getWriter().print("账号可以注册");
        }
    }
}

但是存在一个问题,浏览器默认不让前端8848接收来自其他服务器的响应数据。

跨域

但是前后端交互中出现一个跨域问题:属于前端问题

跨域是指从一个域名的网页去请求另一个域名的资源。只要协议、域名,端口有任何一个的不同,就被当作是跨域

在前端服务页面中(8848) 接收后端服务器响应的数据(8080),使用ajax技术前端后交互,为了安全性,前端默认会进行阻止,不让前端服务接收其他后端的数据。

跨域问题解决:

  • 前端解决

  • 后端解决:跨域资源共享(Cross-origin Resource Sharing),简称CORS

这个机制就是实现了跨站访问控制,使得安全地进行跨站数据传输成为可能。服务器端对于CORS的支持,主要就是通过设置Access-Control-Allow-Origin来进行的。如果浏览器检测到相应的设置,就可以允许ajax进行跨域的访问。只需要在后台中加上响应头来允许域请求!在被请求的Response header中加入设置,就可以实现跨域访问了!在响应头中设置说明,告知浏览器,此次的响应是可靠的。

创建过滤器实现后端设置允许跨域访问:

package filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CorsFilter implements Filter {
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
        //允许携带Cookie时不能设置为* 否则前端报错
        httpResponse.setHeader("Access-Control-Allow-Origin", httpRequest.getHeader("origin"));//允许所有请求跨域
        httpResponse.setHeader("Access-Control-Allow-Methods", "*");//允许跨域的请求方法GET, POST, HEAD 等
        httpResponse.setHeader("Access-Control-Allow-Headers", "*");//允许跨域的请求头
        httpResponse.setHeader("Access-Control-Allow-Credentials", "true");//是否携带cookie

        filterChain.doFilter(servletRequest, servletResponse);
    }
}
<!--配置允许跨域响应-->
<filter>
    <filter-name>corsFilter</filter-name>
    <filter-class>filter.CorsFilter</filter-class>
</filter>

<!--配置进入到过滤器的映射地址-->
<filter-mapping>
    <filter-name>corsFilter</filter-name>
    <url-pattern>/*</url-pattern><!--配置哪些地址可以进入到当前的过滤器中-->
</filter-mapping>

axios框架

  • 下载axios文件https://unpkg.com/axios/dist/axios.min.js

  • 将axios.min.js放在js目录底下

用axios,后端也要处理跨域问题

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        
        <script src="js/axios.min.js" type="text/javascript"></script>
        <script>
            function checkAccount(account){
                axios.get("http://127.0.0.1:8080/webBack/reg?account="+account).then(function(resp){//then就相当于回调,请求成功之后就响应,resp是后端响应的数据
                    document.getElementById("aid").innerHTML=resp.data;//get请求。
                })
                
                /* axios.post("http://127.0.0.1:8080/webBack/reg","account="+account+"&age=20").then(function(resp){
                    document.getElementById("aid").innerHTML=resp.data;
                    //post请求数据是在请求体中,数据和地址是分开的。resp.data是后端响应的数据
                }) */
            }
        </script>
    </head>
    <body>
        <form action="http://127.0.0.1:8080/webBack/reg" method="post">
            账号:<input type="text" name="account" value="" onblur="checkAccount(this.value)"/>
            <span id="aid"></span><br />
            密码:<input type="text" name="age" value=""/><br/>
        </form>
    </body>
</html>

JSON

后端如何向前端响应更多的数据,可以把数据封装在一个个对象中,然后把对象直接响应给前端

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式

  • 数据在键值对中

  • 数据由逗号分隔

  • 大括号保存对象

  • 方括号保存数组

语法:

JSON 键值对是用来保存 JS 对象的一种方式,和 JS 对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 " " 包裹,使用冒号 : 分隔,然后紧接着值:

  • {"firstName": "John"}

  • {"name":"value","sex":"男"}

将以下6个jar包导入lib底下:

  • jackson-annotations-2.13.2.jar

  • jackson-core-2.13.2.jar

  • jackson-databind-2.13.2.2.jar

  • jackson-datatype-jdk8-2.13.2.jar

  • jackson-datatype-jsr310-2.13.2.jar

  • jackson-module-parameter-names-2.13.2.jar文章来源地址https://www.toymoban.com/news/detail-528295.html

public class RegServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doPost");
        resp.setHeader("Content-Type","text/html;charset=utf-8");
        String num=req.getParameter("num");
        Student student=new Student(num,"张三","男","13677778888");
        //resp.getWriter().print(student);//向前端响应的是对象的hashcode值
        //涉及到了两种不同语言(java,js)之间进行数据交互 以前java把数据写入到一个xml 文件中,把xml文件传给前端,前端解析此做法非常复杂.
        //现在交互中,产生一种轻量级的数据格式(name:"jim",age:20]
        // student对象 --->num:109,name:"jim",age:20]
        ObjectMapper objectMapper = new ObjectMapper();
        String s = objectMapper.writeValueAsString(student);//转为JSON键值对形式的字符串
        System.out.println(s);
        resp.getWriter().print(s);//响应给前端
    }
}
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/axios.min.js" type="text/javascript"></script>
        <script>
            function checkAccount(num){
                axios.post("http://127.0.0.1:8080/webBack/reg","num="+num).then(function(resp){
                    //resp.data->Student对象,前端接收到JSON字符串后,自动会转化为js对象
                    console.log(resp.data);
                    console.log(resp.data.num);
                    console.log(resp.data.name);
                    console.log(resp.data.gender);
                    console.log(resp.data.phone);
                })
            }
        </script>
    </head>
    <body>
        <form action="" method="post">
            学号:<input type="text" name="num" value="" onblur="checkAccount(this.value)"/><br/>
            <span id="aid"></span><br />
        </form>
    </body>
</html>

到了这里,关于异步请求(Ajax,axios,json)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 同步_异步请求和Ajax并利用axios框架简化

    目录 同步和异步 原生的Ajax 创建XMLHttpRequest对象 常用方法 常用属性 axios框架 同步请求:发送请求后,会做出回应,回应的内容会覆盖浏览器中的内容,这样会打断其他正常的操作,显得不太友好,并且请求时会携带所有的信息。 异步请求:前端正常输入时,可以同时与后端

    2024年02月13日
    浏览(25)
  • AJAX异步请求&JSON数据格式

    目录 前言 1.AJAX的实现方式 1.1原生的js实现方式 1.2JQuery实现方式 2.1语法 3.JSON数据和Java对象的相互转换 3.1将JSON转换为Java对象 3.2将Java对象转换为JSON AJAX:ASynchronous JavaScript And XML    异步的JavaScript 和 XML。 Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技

    2024年02月16日
    浏览(26)
  • axios/ajax 请求头部添加自定义字段报错(has been blocked by CORS policy: Request header field authorization is ...

    这个错误是由于浏览器的安全机制所引起的,即跨域资源共享(CORS)策略。当浏览器发现一个跨域请求时,会发送一个预检请求(Preflight Request)来确认服务器是否允许跨域请求。在预检请求中,浏览器会检查请求头中的字段是否被服务器允许。如果请求头中包含了服务器不

    2024年02月16日
    浏览(22)
  • AJAX和Axios异步框架

    AJAX:Asynchronous JavaScript And XML 异步的JavaScript和XML 作用:1、与服务器进行数据交换,通过AJAX可以给服务器发送请求,并获取服务器响应数据。使用了AJAX和服务器进行通信,就可以使用ajax和html来代替jsp页面了。这样可以实现将前后端进行分离,因为jsp需要依赖浏览器才能运行

    2024年01月19日
    浏览(31)
  • ajax & axios & json

    目录 一、ajax 1. 概念 2. 实现方式    (1)原生的JS实现方式(了解)       (2) JQeury实现方式 二、axios  1. axios 介绍 2. axios特点 3. 官方文档 4. axios使用 (1) axios的基本使用(发送get/post请求) (2)axios基本使用-获取数据 (3)axios基本使用-传参 (4)axios基本使用-发布

    2024年02月15日
    浏览(28)
  • 【Ajax】如何通过axios发起Ajax请求

    ✍️ 作者简介: 前端新手学习中。 💂 作者主页: 作者主页查看更多前端教学 🎓 专栏分享:css重难点教学   Node.js教学 从头开始学习   ajax学习 Axios是专注于网络数据请求的库,相比于原生的XMLHttpRequest对象,axios简单易用。相比于Jquery,axios更加轻量化,只专注于网络数据请

    2024年02月02日
    浏览(30)
  • 【Ajax】笔记-Axios与函数发送AJAX请求

    1、Axios是一个基于Promise的HTTP库,而Ajax是对原生XHR的封装; 2、Ajax技术实现了局部数据的刷新,而Axios实现了对ajax的封装。 ajax: 本身是针对MVC的编程,不符合现在前端MVVM的浪潮 基于原生的XHR开发,XHR本身的架构不清晰,已经有了fetch的替代方案 JQuery整个项目太大,单纯使用

    2024年02月16日
    浏览(27)
  • 前端同步异步讲解--Ajax(axios进阶)的相关操作

    之前我们讲到了数据在前后端传输是依赖xml文件,但是由于时代变迁,他也已经比逐步淘汰,json对象就逐步开始作为数据传输通道的桥梁,忘记的话可以去回顾文章对应的json对象 最全的前端知识之css与jsp介绍-CSDN博客 文章浏览阅读1k次,点赞31次,收藏21次。ok了,宝子们,

    2024年02月21日
    浏览(31)
  • 异步回调中axios,ajax,promise,cors详解区分

    Ajax、Promise和Axios之间的关系是,它们都是用于在Web应用程序中发送异步HTTP请求的JavaScript库,但它们有不同的实现方式和用法。 Ajax是一种旧的技术,使用XMLHttpRequest对象来向服务器发送异步请求并获取响应。它通常需要手动编写回调函数来处理响应,并且容易出现回调地狱问

    2024年02月13日
    浏览(25)
  • 【AJAX】axios发送请求

    引入axios 以下是axios的GET请求格式: 以下是axios的POST请求格式: 注意:params中的键值对数据是拼接在url上,无论是post还是get请求。 axios

    2024年02月13日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包