浅谈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 相关文章推荐
javascript中的array数组使用技巧
Jan 31 Javascript
Extjs学习过程中新手容易碰到的低级错误积累
Feb 11 Javascript
jquery库文件略庞大用纯js替换jquery的方法
Aug 12 Javascript
浅谈jquery上下滑动的注意事项
Oct 13 Javascript
JS常用函数和常用技巧小结
Oct 15 Javascript
Angular2.0实现modal对话框的方法示例
Feb 18 Javascript
JavaScript动态创建二维数组的方法示例
Feb 01 Javascript
详解小程序用户登录状态检查与更新实例
May 15 Javascript
在JavaScript中使用严格模式(Strict Mode)
Jun 13 Javascript
js实现轮播图效果 z-index实现轮播图
Jan 17 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
Jun 08 Javascript
5种 JavaScript 方式实现数组扁平化
Oct 05 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模拟HTTP认证
2006/10/09 PHP
我的论坛源代码(一)
2006/10/09 PHP
php四种基础算法代码实例
2013/10/29 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
Javascript 继承机制实例
2009/08/12 Javascript
IE图片缓存document.execCommand(&quot;BackgroundImageCache&quot;,false,true)
2011/03/01 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
Google 地图API Map()构造器详解
2016/08/06 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
jackson解析json字符串,首字母大写会自动转为小写的方法
2017/12/22 Javascript
解决js ajax同步请求造成浏览器假死的问题
2018/01/18 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
[03:55]显微镜下的DOTA2特别篇——430灰烬之灵神级操作
2014/06/24 DOTA
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
Python操作CouchDB数据库简单示例
2015/03/10 Python
python保存字符串到文件的方法
2015/07/01 Python
django静态文件加载的方法
2018/05/20 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
python语言元素知识点详解
2019/05/15 Python
python图形开发GUI库wxpython使用方法详解
2020/02/14 Python
基于python实现地址和经纬度转换
2020/05/19 Python
python numpy矩阵信息说明,shape,size,dtype
2020/05/22 Python
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
类的核心特性有哪些
2014/01/01 面试题
体育专业个人求职信范文
2013/12/27 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
宝宝满月祝酒词
2015/08/10 职场文书
Go语言空白表示符_的实例用法
2021/07/04 Golang
python 学习GCN图卷积神经网络
2022/05/11 Python