用angularJS中的$http服务碰到了一个问题:运用$http.post方法向后台传递数据时,后台的PHP页面获取不到data参数传过来的值。
不论是这种姿势:
还是这种姿势:
后台PHP中的$_POST或$_REQUEST都无法获取到data中的值:
输出为一个空数组。为了测试PHP本身是不是真的获取不到值,我就写了个表单测试下:
输出结果为:{"tid":"2"},也就是说表单里的值是可以获取的,但是用ajax发送的数据获取不了!
那么表单数据和ajax发送的post数据之间有什么差异呢?于是我悄悄瞄一眼请求头...
1.表单的请求头部:
2.ajax发送的数据的请求头部:
问题一下子就出来了!表单发送的文本类型是表单类型,而angular的ajax默认发送的则是json数据。
那么怎么把Content-type给改了呢?于是我就打开了angular的官网,照着改一下请求头:
于是输出结果为:{"{\"test\":1}":""},还是有问题。对象并没有自动地序列化(jQuery用习惯了都快忘了居然还有这个问题!)
那么解决方案有:
1.不写成对象的形式,直接写字符串:
2.重写angular中transformRequest,自己写一个转换方法:
3.重写angular中的transformRequest,简单粗暴地把jquery拿过来:
4.修改默认的transformations(这个不太熟,先看一眼官网上怎么说的):
Default Transformations
Angular provides the following default transformations:
Request transformations ($httpProvider.defaults.transformRequest and $http.defaults.transformRequest):
If the data property of the request configuration object contains an object,serialize it into JSON format.
Response transformations ($httpProvider.defaults.transformResponse and $http.defaults.transformResponse):
If XSRF prefix is detected,strip it (see Security Considerations section below).
If JSON response is detected,deserialize it using a JSON parser.
然后照抄:
以上这篇快速解决angularJS中用post方法时后台拿不到值的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。
原文链接:https://www.f2er.com/js/31012.html