美文网首页一起学起来Web前端之路前端Vue专辑
axios发送跨域请求需要注意的问题

axios发送跨域请求需要注意的问题

作者: diamonds_A | 来源:发表于2017-07-06 10:26 被阅读1029次

    在实际项目中前端使用到vue,后端使用php进行开发。前端使用axios请求请求。

    关于跨域

    跨域的概念这些就不说了,百度一大堆相关的资料信息。我就只在这里记录下我在使用当中遇到的问题,以纪念在逝去的几个小时中资料查找的艰辛。

    不多说,直接上代码~~~~~~~~

    同理,跨域的解决方案为cros。服务器 PHP端代码如下(laravel 中间件进行处理):

    public function handle($request, Closure $next)
        {
    
            if ($request->isMethod('OPTIONS')) {
                $response = response('', 200);
            } else {
                $response = $next($request);
            }
            if (!method_exists($response, 'header')) {
                return $response;
            }
            $response->header('Access-Control-Allow-Methods', 'HEAD, GET, POST, PUT, PATCH, DELETE, OPTIONS');
            $response->header(
                'Access-Control-Allow-Headers',
                'Content-Type, Content-Length, Authorization, Accept, X-Requested-With, Token'
            );
            $response->header('Access-Control-Allow-Origin', '*');
            $response->header('Access-Control-Max-Age', 86400);
            return $response;
        }
    
    Vue端 axios 请求:
    axios.post('http://XXXX.com',{name:'test'});
    

    这样写,在请求的时候就会遇到:

    错误.png

    很坑爹有没有?明明是已经设置好了的啊,为毛是这样???

    查找了很多资料才发现,axios在发送数据时需要字符串的方式进行发送,也就是说是放在form-data当中的。在实际项目中,为了方便,我引入了 qs 来帮助处理这块数据:
    解决后的代码应该是:

    import qs from 'qs';
    axios.post('http://xxxxx.com',qs.stringify({name:'test'})).then(re=>{
        console.log(re);
    });
    

    OK,问题解决。明明感觉很简单,但是就是因为自己不懂,导致找了很久才知道原因,之前一直在折腾后台的设置,忽略了前端本身的处理。

    相关文章

      网友评论

      • 3c02bf3bca36:我也是踩了同样的坑,但是我有一个问题啊,无论我用get还是post发请求,从控制台看,最终都是以get请求发送出去的,大家都知道get和post的不同,get是有很多局限的,不知道楼主你设置完毕后查看没有最终是以什么发出请求的?
        3c02bf3bca36:@diamonds_A 如果可以的话能发一份你的代码不?我比较一下。你把业务代码去除就好
        3c02bf3bca36:@diamonds_A 问下你用的axios和http-proxy-middleware是什么版本?
        diamonds_A:你这个问题我这边倒是没有遇到,我这边请求的方法都是和自己定义的是一直的,因为是跨域的原因,所有请求都会出现“option”的预请求,其他的都是正常的。建议你检查下你的代码是否在发送的时候有修改请求方式之类的。
      • a40b6545a91d:qs是什么鬼querystring ?
        diamonds_A:嗯,是的

      本文标题:axios发送跨域请求需要注意的问题

      本文链接:https://www.haomeiwen.com/subject/kbxhhxtx.html