浅谈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 相关文章推荐
IE7提供XMLHttpRequest对象为兼容
Mar 08 Javascript
jQuery 对象中的类数组操作
Apr 27 Javascript
extjs 学习笔记(二) Ext.Element类
Oct 13 Javascript
js使用栈来实现10进制转8进制与取除数及余数
Jun 11 Javascript
超级简单的jquery操作表格方法
Dec 15 Javascript
JS实现超炫网页烟花动画效果的方法
Mar 02 Javascript
js鼠标经过tab选项卡时实现切换延迟
Mar 24 Javascript
vue系列之动态路由详解【原创】
Sep 10 Javascript
JavaScript中this关键字用法实例分析
Aug 24 Javascript
在 Vue.js中优雅地使用全局事件的方法
Feb 01 Javascript
解决layer.confirm选择完之后消息框不消失的问题
Sep 16 Javascript
js里面的变量范围分享
Jul 18 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 第一节 php简介
2012/04/28 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
ajax 文件上传应用简单实现
2009/03/03 Javascript
通过length属性判断jquery对象是否存在
2013/10/18 Javascript
jQuery过滤选择器用法分析
2015/02/10 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
wxPython中listbox用法实例详解
2015/06/01 Python
发布你的Python模块详解
2016/09/15 Python
python如何在循环引用中管理内存
2018/03/20 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
大专应届生个人的自我评价
2013/11/21 职场文书
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
高级编程求职信模板
2014/02/16 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
工程进度款催款函
2015/06/24 职场文书
sql字段解析器的实现示例
2021/06/23 SQL Server
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL