Axios异步请求 json格式

news2024/11/19 1:30:23

Axios是Ajax的一个框架,简化Ajax操作。

需要axios.min.js 和vue.js的jar。

发送普通参数异步请求以及相应异常情况

客户端向服务器端异步发送普通参数值:
- 基本格式: axios().then().catch()
- 示例:
axios({ // axios表示要发送一个异步请求
method : "POST", //请求方式
url : "....", // 发送地址(发给谁)
params:{ //带的参数
uname:"lina",
pwd:"ok"
}
})
.then(function ( value ){ }) //成功响应时执行的回调 value.data可以获取到服务器响应容

.catch(function(reason){}); //有异常时执行的回调reason.response.data可以获取到响应的内容
reason.message / reason.stack 可以查看错误的信息

html代码

<div id="div0">
    uname:<input type="text" v-model="uname"/><br>
    pwd:<input type="text" v-model="pwd"/><br><br>
    <input type="button" value="发送一个带普通请求参数值的异步请求" @click="axios01">
</div>

Axios和vue

<script language="JavaScript" src="script/vue.js"></script>
    <script language="JavaScript" src="script/axios.min.js"></script>
    <script language="JavaScript">
        window.onload=function (){
            var vue=new Vue({
                el:'#div0',
                data:{
                    uname:'lina',
                    pwd:'true'
                },
                methods:{
                //  标签里面定义了 @click="axios01"事件,所以缺个方法进行处理
                    axios01:function (){
                        axios({   // 表示将要给服务器端发送一个异步的请求
                            method:"POST",
                            url:"axios01.do",
                            params:{
                     // this已经进入方法function内部了,但是uname是vue里面的data的uname,所以要用vue
                                uname:vue.uname,
                                pwd:vue.pwd
                            }
                        })
                            .then(function (value) {    //成功响应的时候 (回调)
                            //    接收服务器端响应的数据
                                console.log(value)
                            })
                            .catch(function (reason){   //出问题的时候执行
                                console.log(reason)
                            })
                    }
                }
            });
        }
    </script>
效果:所有请求参数都被放到URL地址后面了,哪怕我们现在用的是POST请求方式。

后端服务器代码

@WebServlet("/axios01.do")
public class Axios01Servlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("utf-8");
   // 获取参数
        String uname = request.getParameter("uname");
        String pwd = request.getParameter("pwd");
        System.out.println("uname="+uname);
        System.out.println("pwd="+pwd);

 response.setCharacterEncoding("utf-8");
 response.setContentType("text/html;charset=utf-8");
//        把两个值返回(响应)到客户端        
        PrintWriter out= response.getWriter(); //得到一个打印流
        out.write("uname="+uname+"pwd="+pwd); //返回给客户端

//        抛异常
        throw new NullPointerException("这里抛出空指针异常");
    }
}

axios程序接收到的响应对象结构

属性名

作用

config

调用axios(config对象)方法时传入的JSON对象

data

服务器端返回的响应体数据

headers

响应消息头

request

原生JavaScript执行Ajax操作时使用的XMLHttpRequest

status

响应状态码

statusText

响应状态码的说明文本

发送请求体为JSON格式

- 什么是JSON:JSON是一种数据格式

例如:JSON格式表示两个学员信息的代码如下:
[{sid:"s001",age:18},{sid:"s002",age:19}]

特点: - JSON表达数据更简洁,更能够节约网络带宽

客户端发送JSON格式的数据给服务器端:

1) 客户端中params需要修改成: data:
2) 服务器获取参数值不再是 request.getParameter()...
而是:
StringBuffer stringBuffer = new StringBuffer("");
BufferedReader bufferedReader = request.getReader();
String str = null ;
while((str=bufferedReader.readLine())!=null){
stringBuffer.append(str);
}
str = stringBuffer.toString() ;
3) 我们会发现 str的内容如下:
{"uname":"lina","pwd":"ok"}
- 服务器端给客户端响应JSON格式的字符串,然后客户端需要将字符串
转化成js Object 所需要的jar:gson 会把客户端发送来的json格式的
数据封装到对象中。
Gson gson =new Gson();
- GSON有两个API
--可以把某个json的字符串转换为所指定的类型
gson.fromJson( json字符串,需要转换的类型)
--将java object转换成json字符串,这样才能响应给客户端
gson.toJson(java Object)
-响应客户端为json的时候,要告诉客户端响应的内容是json格式数据
MIME-TYPE类型
第一个参数给谁发请求response.setContentType("application/json;charset=utf-8");
- 客户端中如果获取的是字符串:"{}"
--js语言中 也有字符串和js对象之间互转的API
string JSON.stringify(object) object ->string
object JSON.parse(string) string->object

html代码

<div id="div0">
    uname:<input type="text" v-model="uname"/><br>
    pwd:<input type="text" v-model="pwd"/><br><br>
    <input type="button" value="发送一个带json格式的参数值的异步请求" @click="axios02">
</div>

axios和vue代码

<script language="JavaScript" src="script/vue.js"></script>
    <script language="JavaScript" src="script/axios.min.js"></script>
    <script language="JavaScript">
        window.onload=function (){
            var vue=new Vue({
                el:'#div0',
                data:{
                    uname:'lina',
                    pwd:'ok'
                },
                methods:{
                //  标签里面定义了 @click="axios01"事件,所以缺个方法进行处理
                    axios02:function (){
                        axios({   // 表示将要给服务器端发送一个异步的请求
                            method:"POST",
                            url:"axios02.do",
                            data:{ //用json格式就要把params转换为data
                                uname:vue.uname,
                                pwd:vue.pwd
                            }
                        })
                            .then(function (value) {    //成功响应的时候 (回调)
                            //    接收服务器端响应的数据进行解析
                                var data=value.data;
                                // console.log(data)
                                //data对应的数据:
                                //{uname:"lina",pwd:"123"}

                                // 一点击输入框的值就改变
                                vue.uname=data.uname;
                                vue.pwd=data.pwd;
                            //    此处value中的data返回的是js object,因此可以直接点出属性
                            //    如果获取的是字符串:"{}"
                            //    js语言中 也有字符串和js对象之间互转的API
                            //    string JSON.stringify(object)   object ->string
                            //     object JSON.parse(string)      string->object
                            })
                            .catch(function (reason){   //出问题的时候执行
                                console.log(reason)
                            })
                    }
                }
            });
        }
    </script>

服务器端代码

@WebServlet("/axios02.do")
public class Axios01Servlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        1.获取客户端发送过来的参数
//    获取请求流    BufferedReader:带一个缓冲的字符流  Reader:字符流
        BufferedReader reader = request.getReader();
//        准备一个StringBuffer
        StringBuffer stringBuffer=new StringBuffer();
//        从流里面读数据
//        准备临时字符串
        String str=null;
//        判断如果读到数据了,就可以往一个 StringBuffer追加
        while ((str=reader.readLine())!=null){
            stringBuffer.append(str);
            str=stringBuffer.toString();  //     得到客户端传过来的json格式的字符串
//            需要转换成JavaObject(封装到java对象中)  比如要注册功能,string转换为User,在调用UserDao保存数据库
//             Gson有两个API
//            1. fromJson(string,T) 将字符串转换成java object
//            2. toJson(java Object) 将java object转化成json字符串,这样才能响应给客户端
            Gson gson=new Gson();
            User user = gson.fromJson(str, User.class);
            System.out.print(user);
//         转换后 打印的是tostring类型  User{uname='lina', pwd='true'}

//        2.    响应给客户端
//            假设user是从数据库查询出来的,现在需要将其转换成json格式的字符串,然后响应给客户端
            user.setUname("a");
            user.setPwd("123");

            String userJsonStr = gson.toJson(user);
            response.setCharacterEncoding("UTF-8");
//      响应给客户端之前,要告诉客户端响应的内容是json格式的数据 所以叫做 MIME-type
//            response.setContentType("text/html;charset=utf-8");  //之前的
     response.setContentType("application/json;charset=utf-8"); //现在的表示发送的是应用程序的json
            response.getWriter().write(userJsonStr);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/338374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

12月无情被辞:想给还不会自动化测试的技术人提个醒

公司前段时间缺人&#xff0c;也面了不少测试&#xff0c;结果竟没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在10-20k&#xff0c;面试的人很多&#xff0c;但是平均水平很让人失望。基本能用一句话概括就是&#xff1a;3年测…

火遍全网的ChatGPT,可免费使用啦

啰嗦几句最近最最最火爆的莫过于ChatGPT了&#xff0c;感觉你不知道ChatGPT是什么做什么&#xff0c;你都没法跟人交流了&#xff01;ChatGPT是美国OpenAI研发的聊天机器人程序&#xff0c;跟小冰、小爱、小度一样&#xff0c;但是不一样的是它拥有强大的信息整合能力&#xff…

【性能】性能测试理论篇_学习笔记_2023/2/11

性能测试的目的验证系统是否能满足用户提出的性能指标发现性能瓶颈&#xff0c;优化系统整体性能性能测试的分类注&#xff1a;这些测试类型其实是密切相关&#xff0c;甚至无法区别的&#xff0c;例如几乎所有的测试都有并发测试。在实际中不用纠结具体的概念。而是要明确测试…

子比主题v6.9.2 免费版源码下载及其激活步骤详解

本人版权所有&#xff0c;请勿打回&#xff01; 文章目录一&#xff0c;子比主题v6.9.2 免费版源码下载及其激活步骤1.1什么是Zibll子比主题&#xff1f;1.2特点二.效果展示2.1 部分源码2.2 效果展示三.源码下载及其视频演示3.1源码下载3.2视频演示一&#xff0c;子比主题v6.9.…

Golang map笔记

map定义三种方式package mainimport "fmt"func main() {// map 的基本定义// 第一种方式 使用make分配数据空间var map1 map[string]stringmap1 make(map[string]string, 3)map1["no1"] "北京"map1["no2"] "天津"map1[&q…

Mysql 增删改查(二)—— 增(insert)、删(delete)、改(update)

目录 一、插入 1、insert 2、replace&#xff08;插入否则更新&#xff09; 二、更新&#xff08;update&#xff09; 三、删除 1、delete 2、truncate&#xff08;截断表&#xff0c;慎用&#xff09; 一、插入 1、insert (1) 单行 / 多行插入 全列插入&#xff1a;…

可能是最强的Python可视化神器,建议一试!

数据分析离不开数据可视化&#xff0c;我们最常用的就是Pandas&#xff0c;Matplotlib&#xff0c;Pyecharts当然还有Tableau&#xff0c;看到一篇文章介绍Plotly制图后我也跃跃欲试&#xff0c;查看了相关资料开始尝试用它制图。 1.Plotly Plotly是一款用来做数据分析和可视…

毕业四年换了3份软件测试工作,我为何仍焦虑?

​今天一看日历&#xff1a;2023.2.11 &#xff0c;才突然意识到自己毕业已经四年了。四年时间里一直在测试行业摸爬滚打&#xff0c;现在是时候记录一下了。 下面我来分享下我这4年软件测试经验及成长历程&#xff0c;或许能帮助你解决很多工作中的迷惑。 01、我是如何开始做…

libevent 实现httpserver 终极版C/C++

最近要用C实现哥httpserver,之前探索了很多个http的库。 1. 我之前最习惯用httplib-cpp github.comhttps://github.com/yhirose/cpp-httplib 但是它要求gcc-g版本要大于4.8。然后我用了6.1.0之后&#xff0c;我的其他库比如mysql glog之后怎么都链接不上。换了系统&a…

Https 协议超强讲解(二)

浏览器是如何确保 CA 证书的合法性&#xff1f; 1. 证书包含什么信息&#xff1f; 颁发机构信息 公钥 公司信息 域名 有效期 指纹 …… 2. 证书的合法性依据是什么&#xff1f; 首先&#xff0c;权威机构是要有认证的&#xff0c;不是随便一个机构都有资格颁发证书&am…

【MySQL】第十六部分 MySQL数据类型详解

【MySQL】第十六部分 MySQL数据类型详解 文章目录【MySQL】第十六部分 MySQL数据类型详解16. MySQL数据类型详解16.1 整数类型16.2 浮点类型16.3 定点数类型16.4 位类型 BIT16.5 日期和时间类型16.6 文本字符串类型16.6.1 CHAR VS VARCHAR类型16.6.2 TEXT类型16.6.3 ENUM类型16…

文件管理(9)

文件管理 0 引言 为什么要引入文件系统&#xff1f; 信息管理的需要&#xff1a;用户面前提供一种规格化的机制&#xff0c;方便用户对文件的存取、提高效率。操作系统本身需要–操作系统本身也不是常驻内存的&#xff0c;也有大量的信息需要存于外存。 1 文件定义 文件&a…

Python语言零基础入门教程(十四)

Python 日期和时间 Python 程序能用很多方式处理日期和时间&#xff0c;转换日期格式是一个常见的功能。 Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。 时间间隔是以秒为单位的浮点小数。 每个时间戳都以自从1970年1月1日午夜&#xff08;历元&…

Linux上面配置Apache2支持Https(ssl)具体方案实现

虽然Nginx比较流行&#xff0c;但是由于一些老项目用到了Apache2来支持Web服务&#xff0c;最近想给服务上一个Https支持&#xff0c;虽然看似教程简单&#xff0c;但是也遇到一些特殊情况&#xff0c;经历了一番折腾也算是解决了所有问题&#xff0c;将过程记录如下。演示是基…

亿级高并发电商项目-- 实战篇 --万达商城项目 三(通用模块、商品服务模块、后台API模块、IDEA忽略文件显示等开发工作

专栏&#xff1a;高并发项目 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支付、若依框…

4.SpringWeb

一、创建项目LomBok:辅助开发工具&#xff0c;减少代码编写Spring Web:带上Spring MVC,可以做Web开发了Thymleaf: Web开发末班引擎&#xff08;不常用&#xff09;创建好&#xff0c;如下&#xff1a;static/ 放置静态资源的根目录templates/ 放置模板文件的根目录 二、资源配置…

新来的23岁软件测试员上来秀了波操作,把几个老员工看傻了

春招了&#xff0c;公司来了个小伙子&#xff0c;一看简历&#xff0c;嘿&#xff1f;22岁&#xff0c;这不刚毕业的小毛孩子嘛&#xff0c;结果没想到人家上来就把现有项目的性能优化了一遍&#xff0c;给公司节省了一半的成本&#xff0c;这种“王炸”打法&#xff0c;直接给…

152、【动态规划】leetcode ——416. 分割等和子集:滚动数组+二维数组(C++版本)

题目描述 原题链接&#xff1a;416. 分割等和子集 解题思路 题目要求是划分出两个相等的集合&#xff0c;那么这两个相等的集合相加&#xff0c;一定等于偶数并且为总集合的二分之一&#xff0c;若总集合求和后不为偶数&#xff0c;则一定不可以划分&#xff0c;直接返回fals…

黄绮珊“绮望三十”巡回演唱会3月4日广州中山纪念堂暖春开唱!

•中年成名 四十余载静待盛放歌手黄绮珊&#xff0c;1991年正式进入歌坛&#xff0c;至今已满三十周年。黄绮珊前半生的歌手之路好像并不是那么顺畅。虽然一直有着华语乐坛的顶尖歌唱实力&#xff0c;但在45岁之前&#xff0c;黄绮珊一直处于“歌红人不红”的状态。不少人听过黄…

GPU服务器安装显卡驱动、CUDA和cuDNN

GPU服务器安装cuda和cudnn1. 服务器驱动安装2. cuda安装3. cudNN安装4. 安装docker环境5. 安装nvidia-docker25.1 ubuntu系统安装5.2 centos系统安装6. 测试docker容调用GPU服务1. 服务器驱动安装 显卡驱动下载地址https://www.nvidia.cn/Download/index.aspx?langcn显卡驱动…