深入理解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 相关文章推荐
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
Jun 26 Javascript
用jscript实现新建和保存一个word文档
Jun 15 Javascript
JavaScript Event学习第十章 一些可替换的事件对
Feb 10 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
Oct 23 Javascript
jQuery不使用插件及swf实现无刷新文件上传
Dec 08 Javascript
微信小程序 开发工具快捷键整理
Oct 31 Javascript
JavaScript 过滤关键字
Mar 20 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
Apr 08 Javascript
微信小程序仿美团城市选择
Jun 06 Javascript
微信头像地址失效踩坑记附带解决方案
Sep 23 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
Nov 21 Javascript
基于ajax及jQuery实现局部刷新过程解析
Sep 12 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
咖啡是不是喝了会上瘾?咖啡是必须品吗!
2021/03/04 新手入门
php实现有趣的人品测试程序实例
2015/06/08 PHP
php的常量和变量实例详解
2017/06/27 PHP
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
JavaScript中的原型继承基础学习教程
2016/05/06 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
2017/06/09 jQuery
微信小程序 rich-text的使用方法
2017/08/04 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
python+django加载静态网页模板解析
2017/12/12 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
python web框架 django wsgi原理解析
2019/08/20 Python
python中open函数的基本用法示例
2019/09/07 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
世界上最好的足球商店:Unisport
2019/03/02 全球购物
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
2014年教师业务学习材料
2014/05/12 职场文书
灵山大佛导游词
2015/02/04 职场文书
行政处罚决定书
2015/06/24 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL