首頁 > web前端 > js教程 > 解決angular的$http.post()提交資料時後台接收不到參數值問題的方法_AngularJS

解決angular的$http.post()提交資料時後台接收不到參數值問題的方法_AngularJS

PHP中文网
發布: 2016-05-16 15:26:42
原創
2557 人瀏覽過

寫此文的背景:在學習使用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){
    //...
  }
});
登入後複製


後端接收:


@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


二、使用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(&#39;myApp&#39;, []);
app.controller(&#39;formCtrl&#39;, function($scope,$http) {
 $scope.login = function() {
  $http({
   url:&#39;/carlt/loginForm&#39;,
   method: &#39;POST&#39;,   
   data: {name:&#39;angular&#39;,password:&#39;333&#39;,age:1}  
  }).success(function(){
   console.log("success!");
  }).error(function(){
   console.log("error");
  })
 };
});
登入後複製


後台列印結果:

後台列印結果:
<
username:null

password:null:

查看前端:


三、解決🎜提交post問題。

相信看過上面提到的就算文章的人已經知道怎麼解決問題了吧。文中是更改了angular的提交方式,使得angular的提交資料方式更像jquery的。


我試過,也是行得通的。然後我又試了另一種方式。如下:

前端不變,還是:

var app = angular.module(&#39;myApp&#39;, []);
app.controller(&#39;formCtrl&#39;, function($scope,$http) {
  $scope.login = function() {
    $http({
      url:&#39;/carlt/loginForm&#39;,
      method: &#39;POST&#39;,      
      data: {name:&#39;angular&#39;,password:&#39;333&#39;,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進行解析,然後將對應的資料綁定到要回傳的物件上;

$.ajax({
  url:&#39;/carlt/loginForm&#39;,
  method: &#39;POST&#39;,
  contentType:&#39;application/json;charset=UTF-8&#39;,
  data:JSON.stringify({"name":"jquery","password":"pwd"}),
  dataType:&#39;json&#39;,
  success:function(data){
    //...
  }
});
登入後複製
      ii) 再把HttpMessageConverter回傳的物件資料綁定到controller中方法的參數。


使用時機:

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

    application/x-www-form-urlencoded,可選(即非必須,因為這種情況的資料 @RequestParam, @ModelAttribute也可以處理,當然@RequestBody也能處理);    multipart/form- multipart/form- multipart/form data, 不能處理(即使用 @RequestBody不能處理這種格式的數據);    其他格式,必須(其他格式包括application/json, application/xml等。這些格式的數據,必須使用 @RequestBody來處理) ;B) PUT方式提交時,根據request header Content-Type的值來判斷:    application/x-www-form-urlencoded,必須; m /form-data, 不能處理;    其他格式,必須;說明:request的body部分的資料編碼格式由header部分的Content-Type指定;四、解決了angular問題之後,發現jquery以原來的方式提交post請求會報錯(錯誤碼415)。 如下方式可以解決jquery提交問題:以上就是解決angular的$http.post()提交資料時後台接收不到參數值問題的方法_AngularJS的內容,更多相關內容請關注PHP中文網(www.php.cn)!
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板