vue中axios跨域请求

vue中axios跨域请求

1.axios 是 第三方库
使用方法:

  • 使用 npm:
    $ npm install axios
  • 使用 bower:
$ bower install axios
  • 使用 cdn:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
axios get 请求示例
HTML代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://cdn.bootcss.com/axios/0.19.0-beta.1/axios.min.js"></script>
    <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
</head>
<body>
    <div id="app">
        <button @click="getData">get-mock-data</button>
        <button @click="get_api_data"> get-api-data </button>
    </div>
    
</body>
</html>

js代码

<script>
          console.log( axios )
        // 当我们引入axios cdn后会全局暴露出一个axios对象
        new Vue ({
            el:"#app",
            methods:{
                
                  getData(){
                    // var p = axios({
                    //     url:'./data/name.json'
                    // });
                    // console.log(p);//axios是一个promise对象

                    axios({
                        url:"./data/name.json",
                        method:'get',//method默认是get请求
                    }).then(function(res){
                        console.log(res)
                        // axios会对我们请求来的结果进行再一次的封装( 让安全性提高 )
                    }).catch(err=>{
                        console.log(err)
                    })

                },

请求结果 : axios会对我们请求来的结果进行再一次的封装( 让安全性提高 )
在这里插入图片描述

 //get在线跨域请求
               get_api_data(){
                  axios({
                      url:'https://请求地址',//在线跨域请求
                      method:"GET",//默认是get请求
                      headers:{//设置请求头
                          'X-Client-Info':' {"a":"3000","ch":"1002","v":"5.0.4","e":"15611234619393093477584"}',
                          'X-Host': 'mall.film-ticket.film.list',
                      },
                      params:{//?search后面的值写在params中
                          cityId: 330100,
                          pageNum: 1,
                          pageSize: 10,
                          type: 1,
                          k: 3969168,
                      }
                  }).then(function(val){
                      console.log(val) // axios会对我们请求来的结果进行再一次的封装( 让安全性提高 )
                  }).catch(function(err){
                      console.log(err)
                  })
              },
          }
      })
  </script>

get跨域请求中params:中的值对应hearders中Query String Parameters
在这里插入图片描述
在这里插入图片描述
get方法总结:

A: 无参数
        axios.get(url).then(res=>console.log(res).catch(error=>conosle.log(error))
 B: 有参数
        axios({
            url: 'http://xxx',
            method: 'get' //默认就是get,这个可以省略,
            params: {
                key: value
            }
        })
axios post 请求示例
html代码
 <button  @click="postData"> post-data </button>
 
 js代码
       postData(){
                    let params = new URLSearchParams()//得到params对象,用来接收请求参数
                    // params.append( key, value )  key是参数名,value是参数值
                    //传递参数值
                     params.append( 'a', 2 )
                     params.append( 'b', 2 )

                    axios({
                        url:'http//localhost/php',
                        method:'post',
                        headers:{//请求头设置为表单提交的请求头
                            'Content-Type':"application/x-www-form-urlencoded"
                        },
                        data:params,
                    }).then( function (val) {
                        console.log(res)
                    }).catch( function (error) { 
                        console.log(error)
                    })
                }
            }
            官方文档中axios post请求案例有点问题,请求会出现跨域问题;
			以上示例为解决官方文档存在问题的写法;

post方法总结

//对于post请求可以统一设置一个请求头,后面所有post请求就可以不用单独设置请求头了
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

 // 具体语法
 let params = new URLSearchParams()//得到params对象,用来接收请求参数

// params.append(key,value) //请求参数写成键值对key就是参数名,value就是参数值

params.append('a',1)
params.append('b',2)

axios({
    url: 'http://localhost/post.php',
    method: 'post',
    data: params,//将请求参数写入data;
      headers: {  //单个请求设置请求头
       'Content-Type': "application/x-www-form-urlencoded"
    }
})
.then(res => {
    console.log( res )
})
.catch( error => {
    if( error ){
    throw error
}
})
  • 14
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Vue使用axios发送GET请求解决跨域问题,可以通过以下步骤: 1. 安装axios:在命令行运行 `npm install axios` 或者 `yarn add axios`,安装axios库。 2. 在Vue组件引入axios:在需要使用axios的组件,可以通过import语句引入axios。 ```javascript import axios from 'axios'; ``` 3. 发送GET请求:使用axios的get方法发送GET请求,并设置`Access-Control-Allow-Origin`头部字段。 ```javascript axios.get('http://api.example.com/data', { headers: { 'Access-Control-Allow-Origin': '*' } }).then(response => { // 处理响应数据 }).catch(error => { // 错误处理 }); ``` 解释:跨域请求是指在浏览器上从一个域名的网页向另一个域名的服务器发送请求。由于浏览器的同源策略限制,普通的Ajax请求只能向同一域名下的接口发送请求,无法直接访问其他域名下的接口。为了解决这个问题,可以使用JSONP、CORS等方式进行跨域请求。 上述代码,使用了Axios库发送GET请求,并在请求头设置了`Access-Control-Allow-Origin`字段。这个字段指示服务器允许任何源(域、协议和端口)的网站访问该API接口。注意:实际生产环境,应该根据实际情况设置合适的跨域策略。 相关问题: 1. 除了设置`Access-Control-Allow-Origin`,还有哪些常见的跨域解决方案? 2. Axios支持哪些其他常用的请求方法? 3. 如何处理Axios发送请求时的错误信息?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值