AngularJS的$http的基本使用

$http是AngularJS中的一个与后端进行交互的服务,以下记录了$http的一些基本使用方式:
测试用的后端接口:

@RestController
public class UserController {

    @GetMapping("/users")
    public User testGet(User user){
        return user;
    }

    @PostMapping("/users/sendJson")
    public User testJson(@RequestBody User user){
        return user;
    }

    @PostMapping("/users")
    public User testFileUpload(User user, @RequestParam(name = "portrait",required = false)MultipartFile portrait)
            throws Exception {
        if(user == null || portrait == null || portrait.isEmpty()){
            return user;
        }
        String fileName = portrait.getOriginalFilename();
        int size = (int) portrait.getSize();
        System.out.println("文件名:"+fileName + ";文件大小:" + size);

        //获取根目录
        String destPath = "/static/savedPic/" + fileName;
        File rootPath = new File(ResourceUtils.getURL("classpath:").getPath());
        File dest = new File(rootPath, destPath);
        if(!dest.getParentFile().exists()){
            dest.getParentFile().mkdirs();
        }
        portrait.transferTo(dest);
        user.setPortraitUrl(destPath);
        return user;
    }

}

测试用的前端页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AngularJS的$http基本使用</title>
    <script src="https://cdn.bootcss.com/angular.js/1.6.3/angular.min.js"></script>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>

    <div ng-app="HttpApp" ng-controller="HttpController">
        <form ng-submit="testGet()">
            <div><label>名称:</label><input ng-model="name" type="text"></div>
            <div><label>年龄:</label><input ng-model="age" type="text"></div>
            <div>
                <label>爱好:</label>
                <input ng-model="sleep" type="checkbox" ng-true-value="'sleep'" ><label>睡觉</label>
                <input ng-model="eat" type="checkbox" ng-true-value="'eat'" ><label>吃饭</label>
                <input ng-model="play" type="checkbox" ng-true-value="'play'" ><label>玩耍</label>
            </div>
            <div>头像:<input onchange='angular.element(this).scope().portraitChanged(this)' type="file"></div>
            <button type="submit">提交</button>
        </form>
    </div>

</body>
</html>

使用$http发送简单GET请求:

<script>
    var app = angular.module('HttpApp', []);
     app.controller('HttpController', function($scope, $http) {
         //get请求测试
         $scope.testGet = function(){
             $scope.hobbies = [];
             if($scope.sleep){
                 $scope.hobbies.push($scope.sleep);
             }
             if($scope.eat){
                 $scope.hobbies.push($scope.eat);
               }
             if($scope.play){
                 $scope.hobbies.push($scope.eat);
             }

             console.log($scope.age);
             console.log($scope.name);
             console.log($scope.hobbies);
             $http.get('/users',
                 {
                     params:{
                         age: $scope.age,
                         name: $scope.name,
                         hobbies: $scope.hobbies
                     }
                 }).then(function (response) {
                     console.log(response.data);
                 });
         };
     });
  </script>

使用$http上传文件,这里请求添加头部’Content-Type’:undefined,浏览器将自动为我们设置正确的Content-Type:multipart/form-data,同时填充合适的boundary:

 $scope.portraitChanged = function(portraitInput){
      $scope.portrait = portraitInput.files[0];
  };
  $scope.testUpload = function(){
      $scope.hobbies = [];
      if($scope.sleep){
          $scope.hobbies.push($scope.sleep);
      }
      if($scope.eat){
          $scope.hobbies.push($scope.eat);
      }
      if($scope.play){
          $scope.hobbies.push($scope.eat);
      }

      console.log($scope.age);
      console.log($scope.name);
      console.log($scope.hobbies);
      var fd = new FormData();
      if($scope.age) {
          fd.append("age", $scope.age);
      }
      if($scope.name) {
          fd.append("name", $scope.name);
      }
      fd.append("hobbies",$scope.hobbies);
      if($scope.portrait) {
          fd.append("portrait", $scope.portrait);
      }
      $http({
          method: 'POST',
          url: '/users',
          data: fd,
          headers: {'Content-Type':undefined},
          transformRequest: angular.identity}).
      then(function (response) {
          console.log(response.data);
      });
  };

以JSON参数方式进行POST提交,同时后端使用@RequestBody注解来接收参数:

   $scope.testJson = function(){
        $scope.hobbies = [];
        if($scope.sleep){
            $scope.hobbies.push($scope.sleep);
        }
        if($scope.eat){
            $scope.hobbies.push($scope.eat);
        }
        if($scope.play){
            $scope.hobbies.push($scope.eat);
        }

        console.log($scope.age);
        console.log($scope.name);
        console.log($scope.hobbies);
        var params = {};
        params.age = $scope.age;
        params.name = $scope.name;
        params.hobbies = $scope.hobbies;

        $http.post('/users/sendJson',
            params).
            then(function (response) {
                console.log(response.data);
            });
    };

以application/x-www-form-urlencoded方式进行POST提交:

$scope.testXXX = function(){
      $scope.hobbies = [];
      if($scope.sleep){
          $scope.hobbies.push($scope.sleep);
      }
      if($scope.eat){
          $scope.hobbies.push($scope.eat);
      }
      if($scope.play){
          $scope.hobbies.push($scope.eat);
      }

      console.log($scope.age);
      console.log($scope.name);
      console.log($scope.hobbies);
      var params = {};
      params.age = $scope.age;
      params.name = $scope.name;
      params.hobbies = $scope.hobbies;

      console.log($.param(params,true));
      $http(
          {
              method: "POST",
              url:'/users',
              headers: {
                  'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
              },
              data: $.param(params,true)
          }).
          then(function (response) {
              console.log(response.data);
          });
  };

猜你喜欢

转载自blog.csdn.net/CrazyLai1996/article/details/82292260
今日推荐