解决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 无符号右移运算符
Apr 17 Javascript
Javascript中的isNaN函数使用说明
Nov 10 Javascript
JavaScript制作的可折叠弹出式菜单示例
Apr 04 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
Aug 12 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
Dec 08 Javascript
js本地图片预览实现代码
Oct 09 Javascript
jQuery使用ajax_动力节点Java学院整理
Jul 05 jQuery
Easyui和zTree两种方式分别实现树形下拉框
Aug 04 Javascript
vuex的简单使用教程
Feb 02 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
Aug 08 jQuery
JS实现随机抽选获奖者
Nov 07 Javascript
js实现数字跳动到指定数字
Aug 25 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使用memcache缓存技术提高响应速度的方法
2014/12/26 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
js+html5实现半透明遮罩层弹框效果
2020/08/24 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
2018/09/25 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
python解析发往本机的数据包示例 (解析数据包)
2014/01/16 Python
django ajax json的实例代码
2018/05/29 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
Java面试笔试题大全
2016/11/23 面试题
护士实习鉴定范文
2013/12/22 职场文书
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
社区宣传标语口号
2015/12/26 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android