快速解决angularJS中用post方法时后台拿不到值的问题

前端之家收集整理的这篇文章主要介绍了快速解决angularJS中用post方法时后台拿不到值的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

用angularJS中的$http服务碰到了一个问题:运用$http.post方法后台传递数据时,后台PHP页面获取不到data参数传过来的值。

不论是这种姿势:

PHP",{ id: 1 }).success(function (data) { console.log(data); });

还是这种姿势:

PHP',data: { id: 1 } }).success(function (data) { console.log(data); });

后台PHP中的$_POST或$_REQUEST都无法获取到data中的值:

PHP;">

输出为一个空数组。为了测试PHP本身是不是真的获取不到值,我就写了个表单测试下:

PHP" method="post">

输出结果为:{"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

You can augment or replace the default transformations by modifying these properties by adding to or replacing the array.

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

猜你在找的JavaScript相关文章