失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 解决angular的$http.post()提交数据时后台接收不到参数值问题办法_AngularJS

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

时间:2019-10-02 09:37:50

相关推荐

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

web前端|js教程

angular,AngularJS,提交数据

web前端-js教程

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

棋牌游戏源码网站,vscode显示隐藏字符,x安装ubuntu,怎么扩展tomcat内存,arxiv 爬虫,ajax 调用php函数,seo优化发展前景,网站首页浮动的电话弹出框,在线课程模板下载 迅雷下载 迅雷下载地址lzw

写此文的目的:通过上面提到的文章中的解决之道,结合自己的经验,总结了如下发现。

前端:html,jquery,angular

后端:java,springmvc

A、平常使用的post提交和接收方式

前端使用jquery提交数据。

真正好用asp源码进销存,ros与ubuntu版本,java爬虫提取正文,php content,黄山seo网站lzw

时时彩最新源码下载,vscode导入语雀,ubuntu系统linux,tomcat怎么解决乱码,显示历史记录用sqlite,shtml 爬虫,php 不显示html,运城seo优化优惠吗,展示类网站图片,拉手网模板lzw

$.ajax({ url:/carlt/loginForm, method: POST, data:{"name":"jquery","password":"pwd"}, dataType:json, success:function(data){ //... }});

后端java接收:

@Controllerpublic 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

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

B、使用angularJs的post方法提交

UserName:

PassWord:

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:

查看前端:

C、解决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对象:

@Controllerpublic 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指定;

D、解决了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的$http.post()提交数据时后台接收不到参数值问题办法_AngularJS》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。