AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的 是:MVVM、模块化、自动化双向数据绑定、语义化标签、依赖注入、等等。

参考资料

  • angularjs中文网:http://www.apjs.net/
  • angularjs官网:http://angularjs.org

写此文的背景:在学习使用angular的$http.post()提交数据时,后台接收不到参数值。于是查阅了相关资料(写的最好的唯有此文http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/)。

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

前端: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

二、使用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',data: {name:'angular',password:'333',age:1}      
        }).success(function(){
            console.log("success!");
        }).error(function(){
            console.log("error");
        })
    };
});

后台打印结果:

username:null
password:null

三、解决angular提交post问题。

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

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

前端不变,依然是:

var app = angular.module('myApp',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

作用:

  1. 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
  2. 再把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',contentType:'application/json;charset=UTF-8',data:JSON.stringify({"name":"jquery","password":"pwd"}),success:function(data){
        //...
    }
});

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

有兴趣的同学可以试试其它方法,欢迎交流,欢迎指正~

【js类库AngularJs】解决angular+springmvc的post提交问题的更多相关文章

  1. html5 拖拽及用 js 实现拖拽功能的示例代码

    这篇文章主要介绍了html5 拖拽及用 js 实现拖拽,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. amaze ui 的使用详细教程

    这篇文章主要介绍了amaze ui 的使用详细教程,本文通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. HTML5适合的情人节礼物有纪念日期功能

    这篇文章主要介绍了HTML5适合的情人节礼物有纪念日期功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  5. ios – 错误域= NSURLErrorDomain代码= -1003“找不到具有指定主机名的服务器

    当我尝试在设备上运行应用程序时出现此错误.当我在模拟器上运行它并且post请求正常工作时,我没有收到此错误.这是我的代码片段:任何帮助表示赞赏.谢谢解决方法此错误通常会提示DNS相关问题.检查设备上的DNS设置并确认您可以使用Safari或其他浏览器浏览互联网.如果有一个url,你可以在同一台服务器上获取,尝试直接在设备上的Safari中访问它.

  6. ios – Xcode Bot:如何在post触发器脚本上获得.ipa路径?

    我正在使用机器人来存档iOS应用程序,我需要获取.ipa产品路径才能将其发布到我们的分发系统中.机器人设置:并使用脚本打印所有env变量,其中不包含ipa文件的路径.此外,一些变量指向不存在的目录,即:XCS_OUTPUT_DIR这里的env变量输出:除此之外,我还能够确认.ipa文件是在另一个文件夹中创建的(/IntegrationAssets//

  7. ios – 使用CocoaPods post install hook将自定义路径添加到HEADER_SEARCH_PATHS

    解决方法在Podfile中定义一个方法:然后在post_install中调用该方法:

  8. iOS7 Safari中的全屏模式

    我正在使用SenchaTouch开发移动网站.在iOS7Safari中,我无法创建顶级地址栏和下面的工具栏消失了.Sencha过去常常处理iOS6,但iOS7最近的一些变化导致了这个问题.http://java.dzone.com/articles/safari-ios-7-and-html5我阅读了上面的链接&对于HTML5游戏而言,这似乎也是一个问题.一些其他应用程序.适用于iOS6的旧win

  9. ios – 如何使用新的Apple Swift语言发布JSON

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  10. ios – POST请求使用application / x-www-form-urlencoded

    后端开发人员在POST请求中给出了这些说明:>路线:{url}/{app_name/{controller}/{action}控制器和动作应该是小帽子.>API测试链接:http:****************>请求应该使用POST方法.>参数应通过请求内容体(FormUrlEncodedContent)传递.>参数应该是json格式.>参数是关键的.在协议中没有经验5,我搜索并结束了我的代码.

随机推荐

  1. Ajax+SpringMVC requestBody

    ajax+SpringMVC经验证,上文写的是比较正确的,所以转过来保存一下.传JSON对象前端后端传JSON字符串+@RequestBody接收前端后端

  2. H5FormData+AJAX+SpringMVC跨域异步上传文件

    最近都没时间整理资料了,一入职就要弄懂业务,整天被业务弄得血崩。总结下今天弄了一个早上的跨域异步上传文件。主要用到技术有HTML5的FormData,AJAX,SpringMVC。注意这个upload.js是自己写的,里面那个ajaxFileUpload并不是jQuery提供的那个上传插件的方法。服务端接口写法:@ResponseBody@RequestMappingpublicvoidaddPicthrowsIOException{System.out.println;response.getWrite

  3. Ajax异步提交List对象,SpringMvc如何接收?

    Springmvc的一个问题一直被广大开发者所诟病,就是在list对象的转换上一直并不是特别好用,网上很多解决方法关于不同的表单提交方式这里就不多说了,只介绍下ajax方式提交list对象的方法。比如你要通过ajax传递下面一段数据到controller:如果像下面这样写肯定是无法传递到后端的:这样肯定会报错User找不到之类的,那么怎么解决呢?

  4. ajax json异步springmvc http请求返回状态码为406的解决

    是因为缺少json相关jar包,网上很多人只是给出了前两个jar,其实不全,依旧406,应该给出四个

  5. AJAX和SpringMVC交互

    AJAX利用jquerySPRING

  6. ajax与springmvc传参方式总结

    若传递的是数组对象,需要用第二种方式,否则失败。①前台$.ajax;后台:@RequestMapping@ResponseBodypublicStringdel{return"";}如果不加Traditional,通过观察浏览器中发送的请求,可以发现参数如下:newArray[]:delArray[]:可以看到,参数的名字为newArray[]而不是我们所定义的newArray,也就是说,当传递数组时,会在我们的数组名称后自动加上”[]”,所以后台接不到。

  7. ajax传递json参数到springmvc

    前后端交互,经常出现400或者415,这里写个小笔记,已做参考,不断完善方式一:前台代码:后台代码:

  8. $.ajax与SpringMVC的那点事-传参与返回

    由于有@RresponseBody标示,SpringMVC会将头信息中的Content-Type:application/x-www-form-urlencoded(默认值)改为application/json;,即返回为JSON格式,所以ajax的dataType:"json"可有可无。

  9. AJAX+JQuery+SpringMVC实现图片上传

    利用ajax实现前端与后台的交互,从服务端获取数据,并调回到前端进行解析。下面是前端代码:下面上后端的代码:Controller层Service层:DAO层:以上都是获取数据的部分,下面是提交数据的代码:Controller:Service:这个是文件上传的关键部分以上

  10. AJAX+SpringMVC 获取后台数据的方式

    利用ajax同步获取服务器的数据,当页面加载完成的时候后台代码:Service层:List转json方法:学习中。。。。。。

返回
顶部