解决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 相关文章推荐
js常用自定义公共函数汇总
Jan 15 Javascript
jQuery使用drag效果实现自由拖拽div
Jun 11 Javascript
js实现Select头像选择实时预览代码
Aug 17 Javascript
JavaScript隐式类型转换
Mar 15 Javascript
详解Angular开发中的登陆与身份验证
Jul 27 Javascript
jQuery Ajax 加载数据时异步显示加载动画
Aug 01 Javascript
浅谈JavaScript 数据属性和访问器属性
Sep 01 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
Jan 04 Javascript
详解使用React全家桶搭建一个后台管理系统
Nov 04 Javascript
jQuery实现的页面详情展开收起功能示例
Jun 11 jQuery
微信小程序系列之自定义顶部导航功能
May 21 Javascript
如何解决日期函数new Date()浏览器兼容性问题
Sep 11 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
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
php生成PDF格式文件并且加密
2015/06/22 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
2015/12/14 PHP
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
jQuery之按钮组件的深入解析
2013/06/19 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
探寻Javascript执行效率问题
2014/11/12 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
vue之浏览器存储方法封装实例
2018/03/15 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
jquery图片预览插件实现方法详解
2019/07/18 jQuery
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
python中List的sort方法指南
2014/09/01 Python
python中元类用法实例
2014/10/10 Python
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
Python产生Gnuplot绘图数据的方法
2018/11/09 Python
opencv与numpy的图像基本操作
2019/03/08 Python
python序列类型种类详解
2020/02/26 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
Python绘制数码晶体管日期
2021/02/19 Python
自荐信格式的六要素
2013/09/21 职场文书
毕业生的自我鉴定
2013/10/29 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
2014年党务公开工作总结
2014/12/09 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
详解Python类和对象内容
2021/06/22 Python
nginx安装以及配置的详细过程记录
2021/09/15 Servers