原创 

关于AngularJs中$http post、get 发送和接受参数详解

分类:    2076人阅读    IT小君  2016-12-14 14:42

1、POST、GET携带参数的写法不一样,如下:

 $http({method: 'post', url: './feedback/mail',
	data:{content:content,mailOrqq:mailOrqq,type:'chat-page-feedback'}
 }).success(function(data, status, headers, config) {
		console.log("IT部落是个神奇的网站");
 }).error(function(data, status, headers, config){
	console.error('我错了');
 });



 $http({method: 'GET',url:'./topic/getTopicCommentList',
				params:{topicId:$stateParams.topicId}
	    	}).success(function(data, status, headers, config) {})
			.error(function(data, status, headers, config){});
聪明的你一定看出来了,POST最好用Data携带数据、GET最好用params携带数据,两者使得区别如下描述:
  • params – {Object.<string|Object>} – Map of strings or objects which will be serialized with theparamSerializer and appended as GET parameters.
  • data – {string|Object} – Data to be sent as the request message data.

2、angularjs $http post参数后台无法接受问题

首先,我们需要了解http 请求携带参数的方式当Content-Type没有设置(即:Content-Type:text/plain;charset=UTF-8),http会以原始数据的方式携带数据,即:Request Payload 

服务器端程序只能通过获取原始数据流的方式来进行解析请求数据;

表单提交(form data 携带数据)默认Content-Type:application/x-www-form-urlencoded,且数据是名值对的方式,所以服务器可以使用特定方式提取数据

通过以上描述你应该看出来了,angularjs $http post默认情况下Content-Type为text/plain;charset=UTF-8所以服务器端程序无法解析数据,所以有如下解法

解法如下:


$http({method: 'post', url: './feedback/mail',
   	headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
   	  transformRequest: function(obj) {  
   	    var str = [];  
   	    for(var p in obj){  
   	      str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));  
   	    }  
   	    return str.join("&");  
   	  } ,
   	data:{content:content,mailOrqq:mailOrqq,type:'chat-page-feedback'}
   	}).success(function(data, status, headers, config) {
   	   	console.log(data);
   	}).error(function(data, status, headers, config){
   	   	console.error('获取聊天历史出错!');
   	});
以上代码设置了Content-Type为text/plain;charset=UTF-8并且以键值对的方式传递数据,所以服务器端可以接受到参数


参考文献:

http://www.w2bc.com/Article/78730
参考问答:
HTTP请求中的form data和request payload的区别?
1、HTTP请求过程中,get请求:表单参数以name=value&name1=value1的形式附到url的后面;
2、post请求:表单参数是在请求体中,也是name=value&name1=value1的形式在请求体中。
POST表单请求提交时,使用的Content-Type是application/x-www-form-urlencoded,而使用原生AJAX的POST请求如果不指定请求头RequestHeader,默认使用的Content-Type是text/plain;charset=UTF-8。
在html中form的Content-type默认值:Content-type:application/x-www-form-urlencoded
如果使用ajax请求,在请求头中出现 request payload导致参数的方式改变了 ,那么解决办法就是:
headers: {'Content-Type':'application/x-www-form-urlencoded'}
或者使用ajax设置:
$.ajaxSetup({contentType: 'application/x-www-form-urlencoded'});
这样,问题就可以解决。

点击广告,支持我们为你提供更好的服务

HTML5数字产品服务公司网站模板

现代时尚家具公司网站模板

html5图标下拉搜索框自动匹配代码

js+css3抽奖转盘旋转点餐代码

html5 canvas进度条圆环图表统计动画特效

响应式咖啡饮品宣传网站模板

css鼠标跟随文字模糊特效

jQuery右端悬浮带返回顶部特效

HTML5 Canvas竖直流动线条背景动画特效

canvas炫酷鼠标移动文字粒子特效

小众时尚单品在线电子商务网站模板

有机水果蔬菜HTML5网站模板

响应式太阳能能源公司网站模板

html5 svg夜空中星星流星动画场景特效

html5 canvas彩色碎片组合球形旋转动画特效

网页设计开发公司网站模板

响应式时尚单品在线商城网站模板

中小型创意设计服务公司网站模板

css+js实现的颜色渐变数字时钟动画特效

HTML5现代家居装潢公司网站模板

点击广告,支持我们为你提供更好的服务
 工具推荐 更多»
点击广告,支持我们为你提供更好的服务