浅谈angularjs $http提交数据探索


Posted in Javascript onJanuary 20, 2017

前两天在搞自己的项目,前端js框架用的是angularjs框架;网站整的差不多的时候出事了;那就是当我用$http.post()方法向服务器提交一些数据的时候;后台总是接收不到数据;

于是采用了其他方法暂时性替代一下;

今天正好有时间研究这个事情;网上查了很多资料;都试了试;都是不太好;但是还是给我提供了一些解决问题的思路;

正文开始:首先做了个demo如下;主要是为了比较他们的不同之处;

浅谈angularjs $http提交数据探索

html如下:

<div class="container-fluid" data-ng-app="jjd" data-ng-controller="index">

 <div class="container">

  <div class="row">

    

   <div class="col-md-5">

    <p class="h4 text-center">jQ的$.post()提交</p>

    <p> </p>

    <div class="form-group">

     <label for="exampleInputEmail1">用户名</label>

     <input type="text" ng-model="sdata.name" class="form-control" placeholder="用户名">

    </div>

    <div class="form-group">

     <label for="">密码</label>

     <input type="password" ng-model="sdata.pwd" class="form-control" placeholder="密码">

    </div>

    <button type="button" class="btn btn-primary btn-block" ng-click="jPostData()">jQ提交</button>

   </div>

   <div class="col-md-2"> </div>

   <div class="col-md-5">

    <p class="h4 text-center">angularjs的$http.post()功能</p>

    <p> </p>

    <div class="form-group">

     <label for="exampleInputEmail1">用户名</label>

     <input type="text" ng-model="sdata2.name" class="form-control" placeholder="用户名">

    </div>

    <div class="form-group">

     <label for="">密码</label>

     <input type="password" ng-model="sdata2.pwd" class="form-control" placeholder="密码">

    </div>

    <button type="button" class="btn btn-primary btn-block" ng-click="aPostData()">$http提交</button>

   </div>

    

  </div>

 </div>

</div>

js代码如下:

var app = angular.module('jjd',[]);
app.controller('index',function($scope,$http){
 $scope.sdata = {
  name:'jQuery',
  pwd:'jQuery'
 };
 $scope.sdata2 = {
  name:'Angularjs',
  pwd:'Angularjs'
 };
 
 /*jQ的ajax提交*/
 $scope.jPostData = function(){
  //console.log($scope.sdata);
  $.post('/web/data.php',$scope.sdata,function(d){
   console.log(d);
  })
 };
 
 /*angularjs的$http提交*/
 $scope.aPostData = function(){
  
  $http({
   url: '/web/data.php',
   method: 'POST',
   data:$scope.sdata2
   }
  }).success(function(da){
   console.log(da);
  });
 };
});

后台采用php的$_POST接收:

<?php
header("Content-type: text/html; charset=utf-8"); 
$aname = $_POST['name'];
$apwd = $_POST['pwd'];

$msg = array();
$msg['name'] = $aname;
$msg['pwd'] = $apwd;
echo json_encode($msg);
?>

服务器采用wampsever的本地启动的本地服务器。致此,页面服务搭建完毕;开始测试;

结果如图:

浅谈angularjs $http提交数据探索

从上图的对比中可以看出后台接收不到值得原因主要是1、2、3处不同;

其中1和2是请求的头文件信息;

3是数据类型不同;jq发送的是Form Data;而angularjs默认发送的是json数据;

产生原因已经找到;下面开始改造;

首先针对1和2,在$http()的方法中配置header信息;

其次对数据进行转换;这里我做了个简单的json到string转换的服务;

改造后的代码如下:

/*------创建angularjs应用------*/
var app = angular.module('jjd',[]);

/*创建json格式到string的转换服务*/
app.service('jsonToStr',function(){
 this.transform = function(jsonData){
  var string = '';
  
  for(str in jsonData){
   string = string + str +'=' + jsonData[str] +'&';
  }
  
  var _last = string.lastIndexOf('&');
  
  string = string.substring(0,_last);
  
  return string;
 };
});

/*---------首页控制器--------*/
app.controller('index',function($scope,$http,jsonToStr){//注入创建的jsonToStr服务
 $scope.sdata = {
  name:'jQuery',
  pwd:'jQuery'
 };
 $scope.sdata2 = {
  name:'Angularjs',
  pwd:'Angularjs'
 };
 
 /*jQ的ajax提交*/
 $scope.jPostData = function(){
  //console.log($scope.sdata);
  $.post('/web/data.php',$scope.sdata,function(d){
   console.log(d);
  })
 };
 
 /*angularjs的$http提交*/
 $scope.aPostData = function(){
  //console.log(jsonToStr.transform($scope.sdata2));
  
  $http({
   url: '/web/data.php',
   method: 'POST',
   data:$scope.sdata2,
   data: jsonToStr.transform($scope.sdata2),//对提交的数据格式化
   headers: {
    'Accept': '*/*',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
   }
  }).success(function(da){
   console.log(da);
  });
 };
});

致此,angularjs提交数据后台接收不到的问题解决(只针对json数据格式);献给奋斗中的小伙伴;

这个问题应该还有一种思路;就是在服务端进行对获取json格式的数据的支持,有兴趣的小伙伴可以尝试一下;

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

Javascript 相关文章推荐
js脚本获取webform服务器控件的方法
May 16 Javascript
在Node.js中使用HTTP上传文件的方法
Jun 23 Javascript
JQuery实现简单的服务器轮询效果实例
Mar 31 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
Oct 13 Javascript
微信小程序 触控事件详细介绍
Oct 17 Javascript
xmlplus组件设计系列之按钮(2)
Apr 26 Javascript
vue.js移动端tab组件的封装实践实例
Jun 30 Javascript
React根据宽度自适应高度的示例代码
Oct 11 Javascript
node.js学习笔记之koa框架和简单爬虫练习
Dec 13 Javascript
微信小程序实现文字从右向左无限滚动
Nov 18 Javascript
Node使用Selenium进行前端自动化操作的代码实现
Oct 10 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
Oct 29 Javascript
原生js实现无限循环轮播图效果
Jan 20 #Javascript
原生js实现弹出层效果
Jan 20 #Javascript
jQuery中DOM节点删除之empty与remove
Jan 20 #Javascript
原生js实现图片放大缩小计时器效果
Jan 20 #Javascript
详解基于angular路由的requireJs按需加载js
Jan 20 #Javascript
原生js实现新闻列表展开/收起全文功能
Jan 20 #Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
Jan 20 #Javascript
You might like
PHP+MySQL5.0中文乱码解决方法
2006/11/20 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
JavaScript 实现??打印?理
2007/04/28 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
基于require.js的使用(实例讲解)
2017/09/07 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
原生JS实现留言板功能
2020/02/08 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
python实现感知器算法详解
2017/12/19 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
Python用字典构建多级菜单功能
2019/07/11 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
python中count函数简单的实例讲解
2020/02/06 Python
Python API len函数操作过程解析
2020/03/05 Python
python实现批量修改文件名
2020/03/23 Python
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
Boden英国官网:英国知名原创时装品牌
2018/11/06 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
预备党员转正思想汇报
2014/01/12 职场文书
精彩自我鉴定
2014/01/16 职场文书
低碳生活倡议书
2014/04/14 职场文书
2016国培研修心得体会
2016/01/08 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
MySQL中连接查询和子查询的问题
2021/09/04 MySQL
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers