深入理解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 Tab 导航插件 (23个)
Jun 11 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
Sep 12 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
Nov 14 Javascript
node.js中的http.createServer方法使用说明
Dec 14 Javascript
IE中鼠标经过option触发mouseout的解决方法
Jan 29 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
Mar 18 Javascript
JS判断iframe是否加载完成的方法
Aug 03 Javascript
Servlet实现文件上传,可多文件上传示例
Dec 05 Javascript
Vue绑定内联样式问题
Oct 17 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
May 16 Javascript
react 生命周期实例分析
May 18 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
Jun 02 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 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
2015/12/10 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
javascript 禁用IE工具栏,导航栏等等实现代码
2013/04/01 Javascript
jQuery中$.click()无效问题分析
2015/01/29 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python列表操作之extend和append的区别实例分析
2015/07/28 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
Python实现的排列组合、破解密码算法示例
2019/04/12 Python
Python全栈之列表数据类型详解
2019/10/01 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
Airbnb爱彼迎官网:成为爱彼迎房东,赚取收入
2019/03/14 全球购物
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
学生党员思想汇报范文
2014/01/09 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
班主任先进事迹材料
2014/12/17 职场文书
个人先进材料范文
2014/12/30 职场文书