深入理解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 相关文章推荐
循环 vs 递归浅谈
Feb 28 Javascript
JavaScript中数据结构与算法(二):队列
Jun 19 Javascript
js中unicode转码方法详解
Oct 09 Javascript
js操作table元素实现表格行列新增、删除技巧总结
Nov 18 Javascript
javascript实现右侧弹出“分享到”窗口效果
Feb 01 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
Mar 11 Javascript
jQuery操作之效果详解
May 19 jQuery
使用JavaScript实现点击循环切换图片效果
Sep 03 Javascript
使用cookie绕过验证码登录的实现代码
Oct 12 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
May 12 Javascript
JS操作json对象key、value的常用方法分析
Oct 29 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
Mar 13 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中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
use jscript with List Proxy Server Information
2007/06/11 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
Python break语句详解
2014/03/11 Python
python数组复制拷贝的实现方法
2015/06/09 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
Python 在字符串中加入变量的实例讲解
2018/05/02 Python
Pycharm以root权限运行脚本的方法
2019/01/19 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
介绍下static、final、abstract区别
2015/01/30 面试题
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
物理教育专业毕业生推荐信
2013/11/03 职场文书
铁路个人事迹材料
2014/01/30 职场文书
运动会方队口号
2014/06/07 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
公司总经理岗位职责
2015/04/01 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
python非标准时间的转换
2021/07/25 Python