解决angular的$http.post()提交数据时后台接收不到参数值问题的方法


Posted in Javascript onDecember 10, 2015

写此文的背景:在学习使用angular的$http.post()提交数据时,后台接收不到参数值,于是查阅了相关资料,寻找解决办法。

写此文的目的:通过上面提到的文章中的解决之道,结合自己的经验,总结了如下发现。
前端:html,jquery,angular
后端:java,springmvc
一、平常使用的post提交和接收方式
前端使用jquery提交数据。

$.ajax({
  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());
    return user;
  }
}
model(不要忘记get、set方法):
public class User {
  private String name;
  private String password;
  private int age;
  
  //setter getter method

}

后台打印:

username:jquery
password:pwd

调用接口查看到的前端返回结果:

解决angular的$http.post()提交数据时后台接收不到参数值问题的方法

二、使用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">
 <br><br>
 <button ng-click="login()">登录</button>
 </form>
</div>

js代码:

var app = angular.module('myApp', []);
app.controller('formCtrl', function($scope,$http) {
 $scope.login = function() {
  $http({
   url:'/carlt/loginForm',
   method: 'POST',   
   data: {name:'angular',password:'333',age:1}  
  }).success(function(){
   console.log("success!");
  }).error(function(){
   console.log("error");
  })
 };
});

后台打印结果:

username:null
password:null:

查看前端:

解决angular的$http.post()提交数据时后台接收不到参数值问题的方法

三、解决angular提交post问题。
相信看过上面提到的哪怕文章的人已经知道怎么解决问题了吧。文中是更改了angular的提交方式,使得angular的提交数据方式更像jquery的。

我试过,也是行得通的。然后我又试了另外一种方式。如下:

前端不变,依然是:

var app = angular.module('myApp', []);
app.controller('formCtrl', function($scope,$http) {
  $scope.login = function() {
    $http({
      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());
    return user;
  }
}
@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提交问题:

$.ajax({
  url:'/carlt/loginForm',
  method: 'POST',
  contentType:'application/json;charset=UTF-8',
  data:JSON.stringify({"name":"jquery","password":"pwd"}),
  dataType:'json',
  success:function(data){
    //...
  }
});

json对象转json字符串:JSON.stringify(jsonObj);

以上就是本文的全部内容,有兴趣的同学可以试试其它方法,希望本文可以解决大家遇到的angular的post提交问题。

Javascript 相关文章推荐
JavaScript 产生不重复的随机数三种实现思路
Dec 13 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
Sep 23 Javascript
Jquery轮播效果实现过程解析
Mar 30 Javascript
jQuery 如何给Carousel插件添加新的功能
Apr 18 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
Mar 23 jQuery
详解webpack babel的配置
Jan 09 Javascript
JS中获取 DOM 元素的绝对位置实例详解
Apr 23 Javascript
使用vue的transition完成滑动过渡的示例代码
Jun 25 Javascript
react koa rematch 如何打造一套服务端渲染架子
Jun 26 Javascript
html-webpack-plugin修改页面的title的方法
Jun 18 Javascript
Vue实现导航栏菜单
Aug 19 Javascript
vue项目开启Gzip压缩和性能优化操作
Oct 26 Javascript
原生js实现数字字母混合验证码的简单实例
Dec 10 #Javascript
js实现新年倒计时效果
Dec 10 #Javascript
jquery判断复选框是否选中进行答题提示特效
Dec 10 #Javascript
jQuery实现选项卡切换效果简单演示
Dec 09 #Javascript
jquery特效 点击展示与隐藏全文
Dec 09 #Javascript
AngularJS实现表单手动验证和表单自动验证
Dec 09 #Javascript
js实现微信分享代码
Oct 11 #Javascript
You might like
PHP防盗链代码实例
2014/08/27 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
2015/10/10 PHP
BOM与DOM的区别分析
2010/10/26 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
ajax异步刷新实现更新数据库
2012/12/03 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
webpack常用配置总览(小结)
2019/11/18 Javascript
python发送邮件接收邮件示例分享
2014/01/21 Python
Python入门篇之字符串
2014/10/17 Python
python web基础之加载静态文件实例
2018/03/20 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
windows下python安装小白入门教程
2018/09/18 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
详解python中init方法和随机数方法
2019/03/13 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
2019/09/26 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
Python中的With语句的使用及原理
2020/07/29 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
自考毕业自我鉴定
2014/03/18 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
出纳工作检讨书
2014/10/18 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL
Python中的min及返回最小值索引的操作
2021/05/10 Python
Python数据结构之队列详解
2022/03/21 Python