angularjs $http提交数据探索
前两天在搞自己的项目,前端js框架用的是angularjs框架;网站整的差不多的时候出事了;那就是当我用$http.post()方法向服务器提交一些数据的时候;后台总是接收不到数据;
于是采用了其他方法暂时性替代一下;
今天正好有时间研究这个事情;网上查了很多资料;都试了试;都是不太好;但是还是给我提供了一些解决问题的思路;
正文开始:首先做了个demo如下;主要是为了比较他们的不同之处;

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的本地启动的本地服务器。致此,页面服务搭建完毕;开始测试;
结果如图:

从上图的对比中可以看出后台接收不到值得原因主要是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格式的数据的支持,有兴趣的小伙伴可以尝试一下;
angularjs $http提交数据探索的更多相关文章
- from表单提交数据之后,后台对象接受不到值
如果SSH框架下,前段页面通过from表单提交数据之后,在后台对象显示空值,也就是接收不到值得情况下.首先保证前段输入框有值,这个可以在提交的时候用jQuery的id或者name选择器alert弹出测 ...
- ASP模拟POST请求异步提交数据的方法
这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限 ...
- ScriptedSandbox64.exe 在写Winform程序Debug时不停提交数据
抓包时发现不停的在提交数据,导致抓包内容看不到. 取消方式:Tools -> Options -> Debugging -> General -> Enable Diagnos ...
- 【http】四种常见的 POST 提交数据方式
来源:http://www.cnblogs.com/aaronjs/p/4165049.html HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT ...
- JavaScript跨域提交数据
1.通过jsonp跨域 场景:假设前台有JS方法"crossJS", 1.1发送请求http://www.xxx.com/?callback=crossJS.(创建一个scr ...
- 提交数据url太长导致提交失败
使用了dojo开发.在datagrid过滤的时候.为了让过滤好处理,直接设置为完全二叉树的方式来存查询条件.但是在提交数据的时候,默认是get?url的方式.结果导致条件选择一两个,url会特别长.然 ...
- 利用ajax的方式来提交数据到后台数据库及交互功能
怎么样用ajax来提交数据到后台数据库,并完成交互呢????? 一.当我们在验证表单的时候,为了阻止把错误的也发送到服务器,我们通常这样设置: $(function(){ var ...
- 四种常见的 POST 提交数据方式
HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中 POST 一般用来向服务端提交数据,本文 ...
- asp.net中http提交数据所遇到的那些坑
http提交数据有两种形式,get和post,不知道的同学请联系度娘. 1.aspnet:MaxHttpCollectionKeys 业务场景:业务很简单,手机端读取本地通讯录,将所有通讯录提交到后台 ...
随机推荐
- HTML_<a>
1.在a标签中调用js函数最适当的方法推荐使用: (1) a href="javascript:void(0);" onclick="js_method()" ...
- centos7设置ip
centos7不能再通过setup命令来设置ip了,但可以通过修改网卡配置文件来设置ip 在/etc/sysconfig/network-scripts目录下找到网卡配置文件,修改之前内容如下 TYP ...
- ubuntu安装源
1.编辑sources.list文件 sudo vi /etc/apt/sources.list 添加以下安装源 #台湾源 deb http://tw.archive.ubuntu.com/ubunt ...
- DMP
1.dmp-data mabagement platform数据管理平台 数据赋能,营销智变 2.定义 把分散的第一,第三方异构.多源数据进行整合,然后纳入统一技术平台中,并对这些数据进行标准化和细分 ...
- JavaWeb学习总结第五篇--认识Cookie机制
Cookie机制 前言 会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie和Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服 ...
- Linux5_环境变量
1.总结背景 在linux系统下,下载并安装了应用程序,很有可能在键入它的名称时出现“command not found”的提示内容. 每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁琐了.这 ...
- vue prop不同数据类型(数组,对象..)设置默认值
vue prop 会接收不同的数据类型,这里列出了 常用的数据类型的设置默认值的写法,其中包含: Number, String, Boolean, Array, Function, Object ...
- (一)unity4.6Ugui中文教程文档-------概要
大家好,我是孙广东. 转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unityma ...
- 【BZOJ2530】[Poi2011]Party (xia)构造
[BZOJ2530][Poi2011]Party Description 给定一张N(保证N是3的倍数)个节点M条边的图,并且保证该图存在一个大小至少为2N/3的团. 请输出该图的任意一个大小为N/3 ...
- nginx日志自动切分
#!/bin/bash NGINX_LOG_PATH=/data/nginx-/logs # 昨天 YESTERDAY=$(date -d "yesterday" +%Y-%m-% ...