前两天在搞自己的项目,前端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提交数据探索的更多相关文章

  1. from表单提交数据之后,后台对象接受不到值

    如果SSH框架下,前段页面通过from表单提交数据之后,在后台对象显示空值,也就是接收不到值得情况下.首先保证前段输入框有值,这个可以在提交的时候用jQuery的id或者name选择器alert弹出测 ...

  2. ASP模拟POST请求异步提交数据的方法

    这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限 ...

  3. ScriptedSandbox64.exe 在写Winform程序Debug时不停提交数据

    抓包时发现不停的在提交数据,导致抓包内容看不到. 取消方式:Tools -> Options -> Debugging -> General -> Enable Diagnos ...

  4. 【http】四种常见的 POST 提交数据方式

    来源:http://www.cnblogs.com/aaronjs/p/4165049.html HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT ...

  5. JavaScript跨域提交数据

    1.通过jsonp跨域    场景:假设前台有JS方法"crossJS", 1.1发送请求http://www.xxx.com/?callback=crossJS.(创建一个scr ...

  6. 提交数据url太长导致提交失败

    使用了dojo开发.在datagrid过滤的时候.为了让过滤好处理,直接设置为完全二叉树的方式来存查询条件.但是在提交数据的时候,默认是get?url的方式.结果导致条件选择一两个,url会特别长.然 ...

  7. 利用ajax的方式来提交数据到后台数据库及交互功能

    怎么样用ajax来提交数据到后台数据库,并完成交互呢????? 一.当我们在验证表单的时候,为了阻止把错误的也发送到服务器,我们通常这样设置:     $(function(){       var ...

  8. 四种常见的 POST 提交数据方式

    HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中 POST 一般用来向服务端提交数据,本文 ...

  9. asp.net中http提交数据所遇到的那些坑

    http提交数据有两种形式,get和post,不知道的同学请联系度娘. 1.aspnet:MaxHttpCollectionKeys 业务场景:业务很简单,手机端读取本地通讯录,将所有通讯录提交到后台 ...

随机推荐

  1. oracle中位图索引和B-tree索引的区别

    1.适用系统的不同:位图索引适合OLAP系统,而B-tree索引适合OLTP系统. 2.占用存储空间不同:位图索引只需要很小的存储空间,而B-tree索引需要占用很大的存储空间. 3.创建需要的时间不 ...

  2. php7.0 出现 curl_setopt(): Disabling safe uploads is no longer supported in 报错!

    项目换成php7.0,进行了测试,使用curl时,出现: curl_setopt(): Disabling safe uploads is no longer supported in xxx.定位到 ...

  3. Java集合系列之TreeMap源代码分析

    一.概述 TreeMap是基于红黑树实现的.因为TreeMap实现了java.util.sortMap接口,集合中的映射关系是具有一定顺序的,该映射依据其键的自然顺序进行排序或者依据创建映射时提供的C ...

  4. java面试的那些事

    跳槽面临的第一个难关那就是面试吧.面试的好坏直接关乎着你年薪的多少.如何顺利完成面试的那些难题,今天我们就从java中复习一下.看看经常面试的知识点,为什么面试这些知识点, 如果你是初级的或刚毕业的j ...

  5. /etc/cron.d添加定时任务脚本后不生效

    原因:定时任务脚本中的命令中包含了环境变量,crontab不能读取到环境变量. vim /etc/cron.d/mymon #mymon内容如下: * * * * * root cd $GOPATH/ ...

  6. JSP隐式对象是JSP容器为每个页面提供的Java对象

    JSP 隐式对象 JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐式对象也被称为预定义变量. JSP所支持的九大隐式对象: 对象 描述 reque ...

  7. ASP.NET动态网站制作(17)-- C#(1)

    前言:用C#也有一年多了,基本上都是边用边学的,现在可以跟着老师系统的学习一下,感觉应该挺好的. 内容: 1.网站部署的相关内容:  (1)想要做一个网站,首先得去买一个域名,老师的域名是在美橙上买的 ...

  8. Problem_A

    Problem_A Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Descripti ...

  9. IntelliJ IDEA集成JProfiler,入门教程

    说明: JProfiler是用于分析J2EE软件性能瓶颈并能准确定位到Java类或者方法有效解决性能问题的主流工具,它通常需要与性能测试工具如:LoadRunner配合使用,因为往往只有当系统处于压力 ...

  10. 摘要: CentOS 6.5搭建Redis3.2.8伪分布式集群

    from https://my.oschina.net/ososchina/blog/856678     摘要: CentOS 6.5搭建Redis3.2.8伪分布式集群 前言 最近在服务器上搭建了 ...