axios的传参问题

axios官方文档

axios的参数问题

axios提供了两种配置请求到达方式:

1. 通过向axios传递相关配置

axios(config)
axios(url[, config])

2. 使用别名
	axios#get(url[, config])
	axios#delete(url[, config])
	axios#post(url[, data[, config]])
	axios#put(url[, data[, config]])
	axios#head(url[, config])
	axios#options(url[, config])
下面是官方文档对axios(config)的详细说明
	
	{
	   // `url` 是用于请求的服务器 URL
	  url: '/user',
	
	  // `method` 是创建请求时使用的方法
	  method: 'get', // default
	
	  // `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
	  // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
	  baseURL: 'https://some-domain.com/api/',
	
	  // `transformRequest` 允许在向服务器发送前,修改请求数据
	  // 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
	  // 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream
	  transformRequest: [function (data, headers) {
	    // 对 data 进行任意转换处理
	    return data;
	  }],
	
	  // `transformResponse` 在传递给 then/catch 前,允许修改响应数据
	  transformResponse: [function (data) {
	    // 对 data 进行任意转换处理
	    return data;
	  }],
	
	  // `headers` 是即将被发送的自定义请求头
	  headers: {'X-Requested-With': 'XMLHttpRequest'},
	
	  // `params` 是即将与请求一起发送的 URL 参数
	  // 必须是一个无格式对象(plain object)或 URLSearchParams 对象
	  params: {
	    ID: 12345
	  },
	
	   // `paramsSerializer` 是一个负责 `params` 序列化的函数
	  // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
	  paramsSerializer: function(params) {
	    return Qs.stringify(params, {arrayFormat: 'brackets'})
	  },
	
	  // `data` 是作为请求主体被发送的数据
	  // 只适用于这些请求方法 'PUT', 'POST', 和 'PATCH'
	  // 在没有设置 `transformRequest` 时,必须是以下类型之一:
	  // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
	  // - 浏览器专属:FormData, File, Blob
	  // - Node 专属: Stream
	  data: {
	    firstName: 'Fred'
	  },
	
	  // `timeout` 指定请求超时的毫秒数(0 表示无超时时间)
	  // 如果请求话费了超过 `timeout` 的时间,请求将被中断
	  timeout: 1000,
	
	   // `withCredentials` 表示跨域请求时是否需要使用凭证
	  withCredentials: false, // default
	
	  // `adapter` 允许自定义处理请求,以使测试更轻松
	  // 返回一个 promise 并应用一个有效的响应 (查阅 [response docs](#response-api)).
	  adapter: function (config) {
	    /* ... */
	  },
	
	 // `auth` 表示应该使用 HTTP 基础验证,并提供凭据
	  // 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头
	  auth: {
	    username: 'janedoe',
	    password: 's00pers3cret'
	  },
	
	   // `responseType` 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
	  responseType: 'json', // default
	
	  // `responseEncoding` indicates encoding to use for decoding responses
	  // Note: Ignored for `responseType` of 'stream' or client-side requests
	  responseEncoding: 'utf8', // default
	
	   // `xsrfCookieName` 是用作 xsrf token 的值的cookie的名称
	  xsrfCookieName: 'XSRF-TOKEN', // default
	
	  // `xsrfHeaderName` is the name of the http header that carries the xsrf token value
	  xsrfHeaderName: 'X-XSRF-TOKEN', // default
	
	   // `onUploadProgress` 允许为上传处理进度事件
	  onUploadProgress: function (progressEvent) {
	    // Do whatever you want with the native progress event
	  },
	
	  // `onDownloadProgress` 允许为下载处理进度事件
	  onDownloadProgress: function (progressEvent) {
	    // 对原生进度事件的处理
	  },
	
	   // `maxContentLength` 定义允许的响应内容的最大尺寸
	  maxContentLength: 2000,
	
	  // `validateStatus` 定义对于给定的HTTP 响应状态码是 resolve 或 reject  promise 。如果 `validateStatus` 返回 `true` (或者设置为 `null` 或 `undefined`),promise 将被 resolve; 否则,promise 将被 rejecte
	  validateStatus: function (status) {
	    return status >= 200 && status < 300; // default
	  },
	
	  // `maxRedirects` 定义在 node.js 中 follow 的最大重定向数目
	  // 如果设置为0,将不会 follow 任何重定向
	  maxRedirects: 5, // default
	
	  // `socketPath` defines a UNIX Socket to be used in node.js.
	  // e.g. '/var/run/docker.sock' to send requests to the docker daemon.
	  // Only either `socketPath` or `proxy` can be specified.
	  // If both are specified, `socketPath` is used.
	  socketPath: null, // default
	
	  // `httpAgent` 和 `httpsAgent` 分别在 node.js 中用于定义在执行 http 和 https 时使用的自定义代理。允许像这样配置选项:
	  // `keepAlive` 默认没有启用
	  httpAgent: new http.Agent({ keepAlive: true }),
	  httpsAgent: new https.Agent({ keepAlive: true }),
	
	  // 'proxy' 定义代理服务器的主机名称和端口
	  // `auth` 表示 HTTP 基础验证应当用于连接代理,并提供凭据
	  // 这将会设置一个 `Proxy-Authorization` 头,覆写掉已有的通过使用 `header` 设置的自定义 `Proxy-Authorization` 头。
	  proxy: {
	    host: '127.0.0.1',
	    port: 9000,
	    auth: {
	      username: 'mikeymike',
	      password: 'rapunz3l'
	    }
	  },
	
	  // `cancelToken` 指定用于取消请求的 cancel token
	  // (查看后面的 Cancellation 这节了解更多)
	  cancelToken: new CancelToken(function (cancel) {
	  })
	}
1.axios.get:
  1. 字符串拼接法:
  • 前端传送数据:

  • 有两种写法:

    
    	data: {
            message:''		 
       //当message类型为String或int时,后端既可以用String接受,又可以用int接受
       	 },
    
    		//第一种写法 
    
    	axios.get("/haha?message="+this.message).then((response)=>{
    	
                    console.log("发送成功");           
                    
                },(error)=>{})
    
    //第二种写法,在config中通过param参数
    	axios.get('/user',
    		{params: {message: this.message}}
    		)
    
    //第二种写法,完全通过配置来创建请求
    	axios({url:'/user',
    		   method:'get',
    		   params: {message: this.message}
    		   }
    		)
    
  • 后端接受:

    @GetMapping("/haha")
    public void s(String message){    
        System.out.println(message);
    }
    

    当所传参数为一个或多个(类型可以是字符串,数字,数组),后端接受的类型。可以都用String类型统一接收,也可以用相对应的数据类型接收;

2.axios.post:
  1. 字符串拼接法:

    对于axios.post,使用字符串拼接传递参数的用法与get方法相同。

  2. body传参:
    • body传参是axios.post所中经常用到的一部分。因为大多数情况下,我们需要传输的参数是一个含有多个参数的JOSN对象。
    • body传参有两种形式,一种是直接以JSON对象格式传送,另一种是转化为字符串后传送。

    以JOSN对象格式传送:

    • 前端传输数据:
    
      axios.post("/haha",{name:this.name,id:this.id},{   // JSON对象中的键值对,可以少于Person对象的成员变量
                    headers: {
                        "Content-Type": "application/json;charset=utf-8"
                    }}).then((response)=>{
                    console.log("发送成功");
                    console.log(response);
                },(error)=>{})
    
    

    或者:

    axios.post("/haha",JSON.stringify({id:this.id,name:this.name})).then((response)=>{
                console.log("发送成功");
                console.log(response);
            },(error)=>{})
    
    

    后端接收数据:

    @PostMapping("/haha")
     public void s(@RequestBody Person p){   //使用@RequestBody将获取的数据绑定到Person对象,person对象中含有name,id属性
     																		
    
        System.out.println(p);
    
    }
    
    	  @PostMapping("/haha")
        public void ha(@RequestBody String  haha){
        Map<String, String> map = JSON.parseObject(haha, new HashMap<String,String>().getClass());         
          //将接收的String类型变量(JSON对象转化过来的),转换为Map集合
        System.out.println(map.get("name"));
        System.out.println(map.get("age"));
        System.out.println(haha);
    

``

当然,也可以用这种方式接收JSON类型以外的其他数据类型,只需用@RequestBody绑定好对应的数据类型就行

转化为字符串后传送:

  • 前端传送数据:

    
     axios.post("/haha",Qs.stringify({name:this.name})).then((response)=>{
                    console.log("发送成功");
                    console.log(response);
                },(error)=>{})
           }
    
  • 后端接收数据:

    
    	 @PostMapping("/haha")
    		public void s( Person p){
    	    System.out.println(p);	    
    	}
    

当前端传递参数为一个数组时,并且该数组不是后端某一个对象中的参数时,可以用axios.post的方式传递,后端用@RequestBody注解接收。

注意:
  • axios默认的 content-typeapplication/json,即JSON形式字符串
  • Qs.stringfy()会将conten-type 转化为 application/x-www-form-urlencoded,即表单形式
  • JSON.stringfy(),会将conten-type 转化为 application/x-www-form-urlencoded,但是此时的Request Payload是json字符串,因此需要在配置中将conten-type 转化为 application/json
  • config中配置参数,直接以data显示,是有区别的。
  • params:{}。与表单提交类似,相当于将参数拼接到地址后面,后台可以用基础类型接收,也可以用对象接收。
  • data:{}。content-typeapplication/json。将data中的参数以JSON字符串的形式传递。
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值