使用axios时,php无法获取POST DATA

2018年5月22日 0 条评论 947 次阅读 0 人点赞

原因是,POST DATA是Object / Array,axios并没有构造相应的post数据。

 

解决方法:

  1.  安装 qs ,使用qs构造。
    1. 安装 cnpm i qs
    2. 使用 this.aixos.post('xxxx',Qs.stringify({a:[1,2,3]})
  2. 完成 transformRequest 钩子方法。

另,使用时需要注意,如果Date类型,需要事先转成String / Number。 有时间了再去完善。 :) 代码如下,

</p>
<p>this.axios({</p>
<p>    url: '',</p>
<p>    method: 'post',</p>
<p>    headers: {</p>
<p>        "content-type": "application/x-www-form-urlencoded"</p>
<p>    },</p>
<p>    <strong>transformRequest</strong>:(obj)=>{</p>
<p>        let result = '';</p>
<p>        var getStr = function(val,source='',key=[]){</p>
<p>            var str = "";</p>
<p>            for(var p in val){</p>
<p>                switch( typeof val[p] ){</p>
<p>                    case "string":</p>
<p>                    case "number":</p>
<p>                    case "boolean":</p>
<p>                        if ( source =='' ){</p>
<p>                            str += p;</p>
<p>                        }else{</p>
<p>                            str += source;</p>
<p>                            key.push(p);</p>
<p>                        }</p>
<p>                        str += encodeURIComponent((key!='')?("[" + key.join('][') + "]") : '');</p>
<p>                        key.pop();</p>
<p>                        str += "=" </p>
<p>                        str += encodeURIComponent(val[p]) + "&";</p>
<p>                        break;</p>
<p>                    case "object":</p>
<p>                        <span style="text-decoration-line: underline;">if (val[p].constructor == Date){</span></p>
<p>                            return '';</p>
<p>                        }</p>
<p>                        if (source == ''){</p>
<p>                            source = p;</p>
<p>                        }else{</p>
<p>                            key.push(p);</p>
<p>                        }</p>
<p>                        str += getStr(val[p],source,key);</p>
<p>                        if (val[p].constructor == Array)</p>
<p>                            source = '';</p>
<p>                        key=[];</p>
<p>                        break;</p>
<p>                    default:</p>
<p>                        str = '';</p>
<p>                        break;</p>
<p>    </p>
<p>                }</p>
<p>            }</p>
<p>            return str;</p>
<p>        }</p>
<p>        result = getStr(obj);</p>
<p>        return result.replace(/&$/,'');</p>
<p>    }</p>
<p>})</p>
<p>

 

3. transformRequest 也可以写成 json 的形式。这样做的好处是,看起来比较明了,缺点是后台要做相应的调整。比如:

 

</p>
<p>    transformRequest:(obj)=></p>
<p>    {</p>
<p>        return "json="+encodeURIComponent(JSON.stringify(obj));</p>
<p>    }</p>
<p>

guojia

这个人太懒什么东西都没留下