亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決angular的$http.post()提交數(shù)據(jù)時后臺接收不到參數(shù)值問題的方法

 更新時間:2015年12月10日 09:09:43   作者:jinhuazhe2013  
這篇文章為大家分享了解決angular的$http.post()提交數(shù)據(jù)時后臺接收不到參數(shù)值問題的方法,感興趣的小伙伴們可以參考一下

寫此文的背景:在學習使用angular的$http.post()提交數(shù)據(jù)時,后臺接收不到參數(shù)值,于是查閱了相關(guān)資料,尋找解決辦法。

寫此文的目的:通過上面提到的文章中的解決之道,結(jié)合自己的經(jīng)驗,總結(jié)了如下發(fā)現(xiàn)。
前端:html,jquery,angular
后端:java,springmvc
一、平常使用的post提交和接收方式
前端使用jquery提交數(shù)據(jù)。

$.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

}

后臺打?。?/p>

username:jquery
password:pwd

調(diào)用接口查看到的前端返回結(jié)果:

二、使用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");
  })
 };
});

后臺打印結(jié)果:

username:null
password:null:

查看前端:

三、解決angular提交post問題。
相信看過上面提到的哪怕文章的人已經(jīng)知道怎么解決問題了吧。文中是更改了angular的提交方式,使得angular的提交數(shù)據(jù)方式更像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部分數(shù)據(jù),使用系統(tǒng)默認配置的HttpMessageConverter進行解析,然后把相應的數(shù)據(jù)綁定到要返回的對象上;

      ii) 再把HttpMessageConverter返回的對象數(shù)據(jù)綁定到 controller中方法的參數(shù)上。

使用時機:

A) GET、POST方式提時, 根據(jù)request header Content-Type的值來判斷:

    application/x-www-form-urlencoded, 可選(即非必須,因為這種情況的數(shù)據(jù)@RequestParam, @ModelAttribute也可以處理,當然@RequestBody也能處理);
    multipart/form-data, 不能處理(即使用@RequestBody不能處理這種格式的數(shù)據(jù));
    其他格式, 必須(其他格式包括application/json, application/xml等。這些格式的數(shù)據(jù),必須使用@RequestBody來處理);
B) PUT方式提交時,根據(jù)request header Content-Type的值來判斷:

    application/x-www-form-urlencoded, 必須;
    multipart/form-data, 不能處理;
    其他格式,必須;
說明:request的body部分的數(shù)據(jù)編碼格式由header部分的Content-Type指定;

四、解決了angular問題之后,發(fā)現(xiàn)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對象轉(zhuǎn)json字符串:JSON.stringify(jsonObj);

以上就是本文的全部內(nèi)容,有興趣的同學可以試試其它方法,希望本文可以解決大家遇到的angular的post提交問題。

相關(guān)文章

最新評論