解决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 相关文章推荐
Whatever:hover 无需javascript让IE支持丰富伪类
Jun 29 Javascript
jQuery判断密码强度实现思路及代码
Apr 24 Javascript
javascript的BOM汇总
Jul 16 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
Dec 18 Javascript
json格式的javascript对象用法分析
Jul 04 Javascript
详解node中创建服务进程
May 09 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
May 15 jQuery
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
Jul 05 jQuery
jQuery插件实现弹性运动完整示例
Jul 07 jQuery
Vue SSR 即时编译技术的实现
May 06 Javascript
原生javascript如何实现共享onload事件
Jul 03 Javascript
javascript实现点击小图显示大图
Nov 29 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中的MVC模式运用技巧
2007/05/03 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
js树形控件脚本代码
2008/07/24 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
JavaScript中return false的用法
2015/03/12 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
原生js实现放大镜组件
2021/01/22 Javascript
vue-router懒加载的3种方式汇总
2021/02/28 Vue.js
Python遍历目录的4种方法实例介绍
2015/04/13 Python
20招让你的Python飞起来!
2016/09/27 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
详解python多线程之间的同步(一)
2019/04/03 Python
PyTorch基本数据类型(一)
2019/05/22 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
python 画函数曲线示例
2019/12/04 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
MaBelle玛贝尔香港官网:香港钻饰连锁店
2019/09/09 全球购物
幼儿园亲子活动方案
2014/01/29 职场文书
信息工作经验交流材料
2014/05/28 职场文书
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
毕业实习单位意见
2015/06/04 职场文书
2015年国庆节寄语
2015/08/17 职场文书
Spring Boot 启动、停止、重启、状态脚本
2021/06/26 Java/Android
SpringBoot整合minio快速入门教程(代码示例)
2022/04/03 Java/Android
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers
分享python函数常见关键字
2022/04/26 Python