浅谈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 相关文章推荐
IE与firefox之jquery用法区别
Oct 03 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
Oct 11 Javascript
javascipt匹配单行和多行注释的正则表达式
Nov 20 Javascript
JavaScript中ES6 Babel正确安装过程
Jul 18 Javascript
JavaScript中数组Array.sort()排序方法详解
Mar 01 Javascript
基于vue2的table分页组件实现方法
Mar 20 Javascript
vue2的todolist入门小项目的详细解析
May 11 Javascript
详解微信小程序 登录获取unionid
Jun 27 Javascript
微信小程序-getUserInfo回调的实例详解
Oct 27 Javascript
vue router总结 $router和$route及router与 router与route区别
Jul 05 Javascript
js+springMVC 提交数组数据到后台的实例
Sep 21 Javascript
vue实现pdf文档在线预览功能
Nov 26 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抽奖小程序的实现代码
2013/06/18 PHP
PHP页面中文乱码分析
2013/10/29 PHP
php执行多个存储过程的方法【基于thinkPHP】
2016/11/08 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
javascript 写类方式之九
2009/07/05 Javascript
用户注册常用javascript代码
2009/08/29 Javascript
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
django实现分页的方法
2015/05/26 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
python远程连接MySQL数据库
2019/04/19 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
django为Form生成的label标签添加class方式
2020/05/20 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
项目工作说明书
2014/07/29 职场文书
教师个人成长总结
2015/02/11 职场文书
小人国观后感
2015/06/11 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
关于使用Redisson订阅数问题
2022/01/18 Redis