如何解决angularjs1和2的区别中post参数获取不到的问题

【js类库AngularJs】解决angular+springmvc的post提交问题
【js类库AngularJs】解决angular+springmvc的post提交问题
【js类库AngularJs】解决angular+springmvc的post提交问题
AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的 是:MVVM、模块化、自动化双向数据绑定、语义化标签、依赖注入、等等。
参考资料:
angularjs中文网:http://www.apjs.net/
angularjs官网:http://angularjs.org
写此文的背景:在学习使用angular的$http.post()提交数据时,后台接收不到参数值。
    于是查阅了相关资料(写的最好的唯有此文//make-angularjs-http-service-behave-like-jquery-ajax/)。
写此文的目的:通过上面提到的文章中的解决之道,结合自己的经验,总结了如下发现。
前端:html,jquery,angular
后端:java,springmvc
一、平常使用的post提交和接收方式
前端使用jquery提交数据。
url:'/carlt/loginForm',
method: 'POST',
data:{"name":"jquery","password":"pwd"},
dataType:'json',
success:function(data){
后端java接收:
@Controller
public class UserController {
@ResponseBody
@RequestMapping(value="/loginForm",method=RequestMethod.POST)
public User loginPost(User user){
System.out.println("username:"+user.getName());
System.out.println("password:"+user.getPassword());
model(不要忘记get、set方法):
public class User {
private int
//setter getter method
后台打印:
username:jquerypassword:pwd
调用接口查看到的前端返回结果:
二、使用angularJs的post方法提交
&div ng-app="myApp" ng-controller="formCtrl"&
&form novalidate&
UserName:&br&
&input type="text" ng-model="user.username"&&br&
PassWord:&br&
&input type="text" ng-model="user.pwd"&
&button ng-click="login()"&登录&/button&
var app = angular.module('myApp', []);
app.controller('formCtrl', function($scope,$http) {
$scope.login = function() {
url:'/carlt/loginForm',
method: 'POST',
data: {name:'angular',password:'333',age:1}
}).success(function(){
console.log("success!");
}).error(function(){
console.log("error");
后台打印结果:
username:nullpassword:null
查看前端:
三、解决angular提交post问题。
相信看过上面提到的哪怕文章的人已经知道怎么解决问题了吧。文中是更改了angular的提交方式,使得angular的提交数据方式更像jquery的。
我试过,也是行得通的。然后我又试了另外一种方式。如下:
前端不变,依然是:
var app = angular.module('myApp', []);
app.controller('formCtrl', function($scope,$http) {
$scope.login = function() {
url:'/carlt/loginForm',
method: 'POST',
data: {name:'angular',password:'333',age:1}
}).success(function(){
console.log("success!");
}).error(function(){
console.log("error");
后台变了,只是在User前加上@RequstBody,因为angular提交的是json对象:
@Controller
public class UserController {
@ResponseBody
@RequestMapping(value="/loginForm",method=RequestMethod.POST)
public User loginPost(@RequestBody User user){
System.out.println("username:"+user.getName());
System.out.println("password:"+user.getPassword());
@RequestBody
&&& & i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
&&& & ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
使用时机:
A) GET、POST方式提时, 根据request header Content-Type的值来判断:
&&& application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
&&& multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
&&& 其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);
B) PUT方式提交时, 根据request header Content-Type的值来判断:
&&& application/x-www-form-urlencoded, 必须;
&&& multipart/form-data, 不能处理;
&&& 其他格式, 必须;
说明:request的body部分的数据编码格式由header部分的Content-Type指定;
四、解决了angular问题之后,发现jquery按照原来的方式提交post请求会报错(错误码415)。如下方式可以解决jquery提交问题:
url:'/carlt/loginForm',
method: 'POST',
contentType:'application/charset=UTF-8',
data:JSON.stringify({"name":"jquery","password":"pwd"}),
dataType:'json',
success:function(data){
json对象转json字符串:JSON.stringify(jsonObj);&
有兴趣的同学可以试试其它方法,欢迎交流,欢迎指正~
感谢关注 Ithao123JS频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊$http.post(/admin/KeyValue/GetListByPage,
pageindex: 1,
pagesize: 8
  .success(function(){
  alert("Mr靖");
代码没有错,但是在后台却接收不到数据,这是为什么呢?
用火狐监控:
用谷歌监控:
可以发现传参方式是request&payload,参数格式是json,而并非用的是form传参,所以在后台用接收form数据的方式接收参数就接收不到了
  POST表单请求提交时,使用的Content-Type是application/x-www-form-urlencoded,而使用原生AJAX的POST请求如果不指定请求头RequestHeader,
默认使用的Content-Type是text/charset=UTF-8,而此处的Content-Type是:
2.解决方法:
&直接上代码:
//要通过post传递的参数
var data = {
pageindex: 1,
pagesize: 8,
//post请求的地址
url = "/admin/KeyValue/GetListByPage",
//将参数传递的方式改成form
postCfg = {
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
transformRequest: function (data) {
return $.param(data);
//发送post请求,获取数据
$http.post(url, data, postCfg)
.success(function (response) {
alert("Mr靖");
接下来再看监视工具:
火狐监视:
谷歌监视:
现在传参方式就变成form方式了,然后后端就可以正常接收参数了!
阅读(...) 评论() &&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!AngularJS&学习笔记值post传值
问题直接调用$http.post()方法时
传值格式是这样的
php接收端接收到的是json格式的,怎么做的跟Ajax post那样传值呢?
分析原因,angular的$http.post()方法默认数据传输格式是json的
& & & post:
{'Content-Type': 'application/charset=utf-8'},
& & & put:
&{'Content-Type':
'application/charset=utf-8'}
所以要修改传输格式
解决方法如下
在angular模块中加入
//修改post方式 form格式传值
angular.module('MyModule', [], function($httpProvider)
{//MyModule是你自己的app名称
& // Use x-www-form-urlencoded
Content-Type
$httpProvider.defaults.headers.post['Content-Type'] =
'application/x-www-form-charset=utf-8';
$httpProvider.defaults.headers.put['Content-Type'] =
'application/x-www-form-charset=utf-8';
& var param = function(obj) {
& & var query = '', name,
value, fullSubName, subName, subValue, innerObj,
& & for(name in obj) {
& & & value
= obj[name];
if(value instanceof Array) {
& for(i=0; i
& & subValue = value[i];
& & fullSubName = name + '[' + i
& & innerObj = {};
& & innerObj[fullSubName] =
& & query += param(innerObj) +
& & & else
if(value instanceof Object) {
& for(subName in value) {
& & subValue =
value[subName];
& & fullSubName = name + '[' +
subName + ']';
& & innerObj = {};
& & innerObj[fullSubName] =
& & query += param(innerObj) +
& & & else
if(value !== undefined && value !== null)
& query += encodeURIComponent(name) + '=' +
encodeURIComponent(value) + '&';
& & return query.length ?
query.substr(0, query.length - 1) :
& // Override $http service's default
transformRequest
& $httpProvider.defaults.transformRequest =
[function(data) {
& & return
angular.isObject(data) && String(data) !== '[object File]'
? param(data) :
&综上所述,问题就解决了。<img TYPE="face" src="/blog7style/images/common/sg_trans.gif" real_src ="/uc/myshow/blog/misc/gif/E___7392ZH00SIGG.gif" STYLE="line-height: 1.5;"
ALT="AngularJS&学习笔记值post传值"
TITLE="AngularJS&学习笔记值post传值" />
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。AngularJS post传值后台获取不到-爱编程
AngularJS post传值后台获取不到
解决办法:
1.设置一下default&head&
2.参数转换一下data:$.param({orderNo:&orderNo,sessionId:sessionId})
$http.defaults.headers.post["Content-Type"]&=&"application/x-www-form-urlencoded";
$scope.afterSales&=&[]
var&sessionId&=&getSesssionId();
//&after&sales
&&&&method:&"POST",
&&&&url:&"/metronic/api/getAfterSales",
&&&&data:$.param({orderNo:&orderNo,sessionId:sessionId}),
&&&&async:&false,
&&&&dataType:'json'
}).success(function(data,&status)&{
&&&&$scope.afterSales&=&
}).error(function(data,&status)&{
版权所有 爱编程 (C) Copyright 2012. . All Rights Reserved.
闽ICP备号-3
微信扫一扫关注爱编程,每天为您推送一篇经典技术文章。

我要回帖

更多关于 angularjs1和2的区别 的文章

 

随机推荐