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


Posted in Javascript onMay 19, 2017

摘要

在angularjs发送post请求的时候,确实很困惑,在传递json数据的时候,总会遇到在服务端无法接受到参数的情况,这里有必要与$.post进行比较学习一下。

一个例子

这里模拟登录的一个场景,post用户名与密码,服务端接受账户并直接返回到客户端不做其它业务处理。

使用angularjs版本

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

服务端

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);
    });

响应

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

这里我们看一下请求体

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

那么我们现在看看angularjs的$http.post的情况,到底区别在哪儿?

@{
  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>

登录

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

出现了,处于习惯的原因,平时就会这样来写$http.post的。但结果并不是想要的。那么咱们与$.post对比一下请求体。

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

看到没?差别就在这里。

发现问题了,那么我们就要转化为$.post提交参数的方式。幸好,angularjs中$http.post提供了一个转化参数的transformRequest方法,可以在config中加上该参数:

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("&");
          }
        };

 它的作用就是将提交的参数转化为$.post提交参数的方式。这样看到的请求体中参数就与$.post相同了。

可以在全局进行设置

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

总结

angularjs在进行post请求的时候要进行参数配置。关于angularjs的post请求,建议在初始化模块的时候对post请求设置请求头与请求参数转换的设置,这样可以在其他地方方便使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript读取xml
Nov 04 Javascript
CSDN轮换广告图片轮换效果
Mar 27 Javascript
js 文件引入实现代码
Apr 23 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
Dec 12 Javascript
javascript里使用php代码实例
Dec 13 Javascript
JS实现文档加载完成后执行代码
Jul 09 Javascript
JavaScript学习笔记之数组的增、删、改、查
Mar 23 Javascript
javascript回到顶部特效
Jul 30 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
May 05 Javascript
详解如何webpack使用DllPlugin
Sep 30 Javascript
vue将单页面改造成多页面应用的方法
Nov 25 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
Dec 05 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
May 19 #jQuery
EasyUI Datebox 日期验证之开始日期小于结束时间
May 19 #Javascript
javascript 开发之百度地图使用到的js函数整理
May 19 #Javascript
微信小程序表单验证错误提示效果
May 19 #Javascript
微信小程序实现滑动删除效果
May 19 #Javascript
微信小程序图片横向左右滑动案例
May 19 #Javascript
layui导航栏实现代码
May 19 #Javascript
You might like
一个PHP+MSSQL分页的例子
2006/10/09 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
js的event详解。
2006/09/06 Javascript
javascript静态的url如何传递
2007/05/03 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
javascript数组随机排序实例分析
2015/07/22 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
window.location.hash知识汇总
2015/11/09 Javascript
jQuery中Nicescroll滚动条插件的用法
2016/11/10 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
JS数组中对象去重操作示例
2019/06/04 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
深入了解JavaScript词法作用域
2020/07/29 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
python解析html开发库pyquery使用方法
2014/02/07 Python
Python随机生成彩票号码的方法
2015/03/05 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
Python异常的检测和处理方法
2018/10/26 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
高中生学习生活的自我评价
2013/10/09 职场文书
2014个人反腐倡廉思想汇报
2014/09/15 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
西游降魔篇观后感
2015/06/15 职场文书
休学证明范本
2015/06/19 职场文书
优秀教师主要事迹材料
2015/11/04 职场文书
HTML页面滚动时部分内容位置固定不滚动的实现
2021/04/14 HTML / CSS
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript