最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解Angularjs中$http.post與$.post

 更新時(shí)間:2017年05月19日 16:57:31   作者:wolfy  
本篇文章主要介紹了深入理解Angularjs中$http.post與$.post ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

摘要

在angularjs發(fā)送post請(qǐng)求的時(shí)候,確實(shí)很困惑,在傳遞json數(shù)據(jù)的時(shí)候,總會(huì)遇到在服務(wù)端無(wú)法接受到參數(shù)的情況,這里有必要與$.post進(jìn)行比較學(xué)習(xí)一下。

一個(gè)例子

這里模擬登錄的一個(gè)場(chǎng)景,post用戶名與密碼,服務(wù)端接受賬戶并直接返回到客戶端不做其它業(yè)務(wù)處理。

使用angularjs版本

/*
 AngularJS v1.2.15
 (c) 2010-2014 Google, Inc. http://angularjs.org
 License: MIT
*/

服務(wù)端

  public class AccountController : Controller
  {

    // GET: /<controller>/
    public IActionResult Login()
    {
      return View();
    }
    [HttpPost]    
    public IActionResult Login(string userName,string userPwd)
    {
      var resut = Request.Form;
      return Json(new { _code = 200, _msg = "Login success", name = userName, password = userPwd });
    }
  }

$.post

首先使用$.post的方式,直接提交賬戶密碼

  $.post("@Url.Content("~/Account/Login")",{ userName: "2342342", userPwd:"2sssdfs" },function (data) {
      console.log(data);
    });

響應(yīng)

這里我們看一下請(qǐng)求體

那么我們現(xiàn)在看看angularjs的$http.post的情況,到底區(qū)別在哪兒?

@{
  Layout = null;
}
<!DOCTYPE html>
<html ng-app="login">
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>IT怪O 用戶登錄</title>
  <link href="~/lib/bootstrap/dist/css/bootstrap.css" rel="external nofollow" rel="stylesheet" />
  <script src="~/js/angular.min.js"></script>
  <script>
    angular.module("login", []).controller("LoginController", function ($http, $scope) {
      $scope.Login = function () {
        var data = { userName: $scope.userName, userPwd: $scope.userPwd };

        var config = {
          headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
          //transformRequest: function (obj) {
          //  var str = [];
          //  for (var p in obj) {
          //    str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
          //  }
          //  return str.join("&");
          //}
        };
        console.log(data);
        $http.post("@Url.Content("~/Account/Login")", data, config).success(function (data) {
          console.log(data);
        });
      };

    });
  </script>
</head>
<body>
  <div ng-controller="LoginController">
    <input type="text" placeholder="用戶名" ng-model="userName" value="" />
    <input type="password" placeholder="密碼" ng-model="userPwd" value="" />
    <button ng-click="Login()">登錄</button>
  </div>
</body>
</html>

登錄

出現(xiàn)了,處于習(xí)慣的原因,平時(shí)就會(huì)這樣來(lái)寫(xiě)$http.post的。但結(jié)果并不是想要的。那么咱們與$.post對(duì)比一下請(qǐng)求體。

看到?jīng)]?差別就在這里。

發(fā)現(xiàn)問(wèn)題了,那么我們就要轉(zhuǎn)化為$.post提交參數(shù)的方式。幸好,angularjs中$http.post提供了一個(gè)轉(zhuǎn)化參數(shù)的transformRequest方法,可以在config中加上該參數(shù):

  var config = {
          headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
          transformRequest: function (obj) {
            var str = [];
            for (var p in obj) {
              str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
            }
            return str.join("&");
          }
        };

 它的作用就是將提交的參數(shù)轉(zhuǎn)化為$.post提交參數(shù)的方式。這樣看到的請(qǐng)求體中參數(shù)就與$.post相同了。

可以在全局進(jìn)行設(shè)置

  <script>
    angular.module("login", []).controller("LoginController", function ($http, $scope) {
      $scope.Login = function () {
        var data = { userName: $scope.userName, userPwd: $scope.userPwd };
        console.log(data);
        $http.post("@Url.Content("~/Account/Login")", data).success(function (data) {
          console.log(data);
        });
      };

    }).config(function ($httpProvider) {     
      $httpProvider.defaults.transformRequest = function (obj) {
        var str = [];
        for (var p in obj) {
          str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
        }
        return str.join("&");
      };
      $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
    });
  </script>

總結(jié)

angularjs在進(jìn)行post請(qǐng)求的時(shí)候要進(jìn)行參數(shù)配置。關(guān)于angularjs的post請(qǐng)求,建議在初始化模塊的時(shí)候?qū)ost請(qǐng)求設(shè)置請(qǐng)求頭與請(qǐng)求參數(shù)轉(zhuǎn)換的設(shè)置,這樣可以在其他地方方便使用。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

临夏县| 闽清县| 麻江县| 鹤峰县| 若尔盖县| 凤阳县| 棋牌| 砚山县| 沙田区| 杭锦旗| 确山县| 隆子县| 高邑县| 滦平县| 当涂县| 榆社县| 台东县| 中宁县| 盘山县| 丹凤县| 西畴县| 怀远县| 弋阳县| 台东县| 仁怀市| 常州市| 霍林郭勒市| 乐昌市| 广西| 望城县| 海阳市| 昌平区| 寻乌县| 肇源县| 阿瓦提县| 阿城市| 繁峙县| 大化| 蕲春县| 凌源市| 揭东县|