angular.js - angular提交表单的数据格式

浏览:23日期:2023-02-04

问题描述

我是这样提交表单的

$http({ headers: {’Content-Type’: ’application/x-www-form-urlencoded’ }, method: ’POST’, url: url, data: {type: 1 }})

为什么我的服务器接到的会是这样的东西?

{ ’{'type':1}’: ’’ }

问题解答

回答1:

问题解决了原因:By default, jQuery transmits data using Content-Type: x-www-form-urlencoded and the familiar foo=bar&baz=moe serialization. AngularJS, however, transmits data using Content-Type: application/json and { 'foo': 'bar', 'baz': 'moe' } JSON serialization

默认情况下,jQuery传输数据使用Content-Type: x-www-form-urlencodedand和类似于'foo=bar&baz=moe'的序列,然而AngularJS,传输数据使用Content-Type: application/json和{ 'foo': 'bar', 'baz': 'moe' }这样的json序列。

解决方法

.config(function($httpProvider) { $httpProvider.defaults.headers.put[’Content-Type’] = ’application/x-www-form-urlencoded’; $httpProvider.defaults.headers.post[’Content-Type’] = ’application/x-www-form-urlencoded’; // Override $http service’s default transformRequest $httpProvider.defaults.transformRequest = [function(data) {/** * The workhorse; converts an object to x-www-form-urlencoded serialization. * @param {Object} obj * @return {String} */var param = function(obj) { var query = ’’; var name, value, fullSubName, subName, subValue, innerObj, i; for (name in obj) {value = obj[name];if (value instanceof Array) { for (i = 0; i < value.length; ++i) {subValue = value[i];fullSubName = name + ’[’ + i + ’]’;innerObj = {};innerObj[fullSubName] = subValue;query += param(innerObj) + ’&’; }} else if (value instanceof Object) { for (subName in value) {subValue = value[subName];fullSubName = name + ’[’ + subName + ’]’;innerObj = {};innerObj[fullSubName] = subValue;query += param(innerObj) + ’&’; }} else if (value !== undefined && value !== null) { query += encodeURIComponent(name) + ’=’ + encodeURIComponent(value) + ’&’;} } return query.length ? query.substr(0, query.length - 1) : query;};return angular.isObject(data) && String(data) !== ’[object File]’? param(data): data; }];})回答2:

可能是你jquery用习惯了,jquery封装了query_string操作你在angular加上这段代码就好了,改下示例名称

APP.config([’$httpProvider’,function($httpProvider) { $httpProvider.defaults.headers.post[’Content-Type’] = ’application/x-www-form-urlencoded’; // Override $http service’s default transformRequest $httpProvider.defaults.transformRequest = [function(data) {/** * The workhorse; converts an object to x-www-form-urlencoded serialization. * @param {Object} obj * @return {String} */var param = function(obj) { var query = ’’; var name, value, fullSubName, subName, subValue, innerObj, i; for (name in obj) {value = obj[name];if (value instanceof Array) { for (i = 0; i < value.length; ++i) {subValue = value[i];fullSubName = name + ’[’ + i + ’]’;innerObj = {};innerObj[fullSubName] = subValue;query += param(innerObj) + ’&’; }} else if (value instanceof Object) { for (subName in value) {subValue = value[subName];fullSubName = name + ’[’ + subName + ’]’;innerObj = {};innerObj[fullSubName] = subValue;query += param(innerObj) + ’&’; }} else if (value !== undefined && value !== null) { query += encodeURIComponent(name) + ’=’ + encodeURIComponent(value) + ’&’;} } return query.length ? query.substr(0, query.length - 1) : query;};return angular.isObject(data) && String(data) !== ’[object File]’? param(data): data; }];}]);回答3:

1、看angularjs的官方文档了解其用法,貌似$http的header有点不同。2、下载fiddler工具,查看请求header和params等信息。

回答4:

服务端不能直接用 $_REQUEST/$_POST获取到,而需要用:$params = json_decode(file_get_contents(’php://input’),true);

来获取提交数据

相关文章: