深入理解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中Array 对象相关的几个方法
Dec 22 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
May 19 Javascript
JavaScript实现Java中StringBuffer的方法
Feb 09 Javascript
jquery使用ul模拟select实现表单美化的方法
Aug 18 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
May 05 Javascript
vue.js的安装方法
May 12 Javascript
Angular 4依赖注入学习教程之简介(一)
Jun 04 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
Jun 09 jQuery
JavaScript数据类型和变量_动力节点Java学院整理
Jun 26 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
Jul 18 Javascript
AngularJs分页插件使用详解
Jun 30 Javascript
jquery插件实现轮播图效果
Oct 19 jQuery
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使用DES进行加密与解密的方法详解
2013/06/06 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
js脚本学习 比较实用的基础
2006/09/07 Javascript
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
Python 字典与字符串的互转实例
2017/01/13 Python
python画蝴蝶曲线图的实例
2019/11/21 Python
Python加速程序运行的方法
2020/07/29 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
单位创先争优活动方案
2014/01/26 职场文书
学校课外活动总结
2014/05/08 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
视光学专业自荐信
2014/06/24 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
个人廉政承诺书
2015/04/28 职场文书
撤诉申请怎么写
2015/05/19 职场文书
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
Mysql数据库group by原理详解
2022/07/07 MySQL
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS