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格式的数据的支持,有兴趣的小伙伴可以尝试一下;

时间: 2024-10-14 12:37:30

angularjs $http提交数据探索的相关文章

智慧中国杯算法赛解读 | 精准资助数据探索(一)

智慧中国杯是由DataCastle(数据城堡)主办的全国大数据创新应用大赛,提供了百万的竞赛奖金,数据城堡的创始人周涛是<大数据时代>的中文翻译者,在业内享有很高的名气. OpenFEA将对此次大赛进行持续关注和报道,以推进大数据在国内的发展,让更多的人参与到大数据的应用创新当中来,为社会培养大数据人才出一份自己的力量. 此次大赛分为三个环节,第一是算法赛,任何个人和组织团体都可以参加,无资格限制,提交比赛结果即可.算法赛最后截止时间为2017年2月20日,在此之前提交结果都有效,现在报名还来

表单提交时如何将错误信息传递到页面中,并且保存原来提交数据

曾经何时,你还有我或许都在困惑,如何方便的将验证不通过的表单信息再返回到前台页面,例如我注册一个账号,辛辛苦苦填写了N多项,一个格式验证没有通过,一切都需要充填,虽然Ajax可以解决这个问题,但是我们总不能把所有表单提交都弄成ajax,更何况有若干人就是没事把javascript给禁止了.哎哎,好了解决方案来了,下面以用户登录为例,说说我的解决方案. 服务器端用nodejs实现: login.html 简单的提交表单 <form action="" id="loginF

苹果微信浏览器不能post方式提交数据问题

form表单中采用post方式提交数据时,在苹果的微信浏览器中无法传递,安卓的可以 如图: 在controller中获取该数据为 null 将表单的提交方式修改为get就能够获取到 现在采用Ajax方式进行提交

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

HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式. 我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范.规范把 HTTP 请求分为三个部分:状态行.请求头.消息主体.类似于下面这样: BASH<method> <request-URL> <vers

2016 系统设计第一期 (档案一)jQuery ajax serialize()方法form提交数据

jQuery ajax serialize()方法form提交数据,有个很奇怪的问题,好像不能取到隐藏控件的值. //点击提交按钮保存数据 $('#btn_submitUser').click(function () { var UserId = $('#UserId').val(); if (UserId == "") { $.ajax({ type: "POST", url: '/Users/Create/', data: $("#SaveUserFo

JavaWeb开发中form、ajax提交数据Model转化

JavaWeb开发中form.ajax提交数据Model转化 问题 最近学习MongoDB数据库,作为java开发的我,当然需要做个小的web程序来测试一番了.在html中我采取ajax提交方式,因为我要模拟各种类型的数据,基础数据类型.数组.对象等.然而,最终发现了个不同的地方:Form和ajax提交数据,在HttpServletRequest中尽然参数名有所不同. 数据类型 form ajax 基础数据 para=value para=value 数组 para[]={"aaa",

C# HttpWebRequest提交数据方式浅析

原文:http://developer.51cto.com/art/200909/149995.htmC# HttpWebRequest提交数据方式其实就是GET和POST两种,那么具体的实现以及操作注意事项是什么呢?那么本文就向你详细介绍C# HttpWebRequest提交数据方式的这两种利器. AD:2014WOT全球软件技术峰会北京站 课程视频发布 C# HttpWebRequest提交数据方式学习之前我们先来看看什么是HttpWebRequest,它是 .net 基类库中的一个类,在命

Android提交数据到服务器的两种方式四种方法

Android应用开发中,会经常要提交数据到服务器和从服务器得到数据,本文主要是给出了利用http协议采用HttpClient方式向服务器提交数据的方法. /** * @author Dylan * 本类封装了Android中向web服务器提交数据的两种方式四种方法 */ public class SubmitDataByHttpClientAndOrdinaryWay { /** * 使用get请求以普通方式提交数据 * @param map 传递进来的数据,以map的形式进行了封装 * @p

JQuery以JSON方式提交数据到服务端

JQuery将Ajax数据请求进行了封装,从而使得该操作实现起来容易许多.以往我们要写很多的代码来实现该功能,现在只需要调用$.ajax()方法,并指明请求的方式.地址.数据类型,以及回调方法等.下面的代码演示了如何将客户端表单数据封装成JSON格式,然后通过JQuery的Ajax请求将数据发送到服务端,并最终将数据存储到数据库中.服务端定义为一个.ashx文件,事实上你可以将服务端定义为任何能接收并处理客户端数据的类型,如Web Service,ASP.NET Page,Handler等. 首