$http.post('request-url',{ 'message' : message });
我也试过它与数据作为字符串(具有相同的结果):
$http.post('request-url',"message=" + message);
它似乎是工作,当我使用它在以下格式:
$http({ method: 'POST',url: 'request-url',data: "message=" + message,headers: {'Content-Type': 'application/x-www-form-urlencoded'} });
但是有一种方法使用$ http.post() – 并且我总是要包括标题才能工作?我相信上面的内容类型是指定发送数据的格式,但是我可以发送它作为javascript对象吗?
There is much confusion among newcomers to AngularJS as to why the
$http
service shorthand functions ($http.post()
,etc.) don’t appear to
be swappable with the jQuery equivalents (jQuery.post()
,etc.)The difference is in how jQuery and AngularJS serialize and transmit the data. Fundamentally,the problem lies with your server language of choice being unable to understand AngularJS’s transmission natively … By default,jQuery transmits data using
06000
and the familiar
foo=bar&baz=moe
serialization.AngularJS,however,transmits data using
06001
and
{ "foo": "bar","baz": "moe" }
JSON serialization,which unfortunately some Web server languages—notably
PHP—do not unserialize natively.
奇迹般有效。
码
// Your app's root module... angular.module('MyModule',[],function($httpProvider) { // Use x-www-form-urlencoded Content-Type $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8'; /** * The workhorse; converts an object to x-www-form-urlencoded serialization. * @param {Object} obj * @return {String} */ var param = function(obj) { var query = '',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; }; // Override $http service's default transformRequest $httpProvider.defaults.transformRequest = [function(data) { return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data; }]; });