返回顶部
首页 > 资讯 > 前端开发 > node.js >angular中如何使用post、get向后台传参
  • 449
分享到

angular中如何使用post、get向后台传参

2024-04-02 19:04:59 449人浏览 泡泡鱼
摘要

小编给大家分享一下angular中如何使用post、get向后台传参,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、问题的来源我们都知道向后台传参可以使用get、put,其形式就类似于n

小编给大家分享一下angular中如何使用post、get向后台传参,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

一、问题的来源

我们都知道向后台传参可以使用get、put,其形式就类似于name=jyy&id=001。但是在ng中我却发现使用$Http post进行异步传输的过程中后台是接收不到数据的。其实这个问题是因为请求头的缘故。在ng中默认的请求头是:“Content-Type":"application/JSON",也就是说传递参数是使用的就是json格式。但是后台默认的却是Content-Type': 'application/x-www-fORM-urlencoded'。因此在这样的情况下后台接收到的数据就会是空的。

那么为什么使用get形式就可以传参呢?在书中我发现这样的一句话:”这个键的值是一个字符串map或对象,会被转换成查询字符串追加在URL后面。如果值不是字符串,会被JSON序列化”,可以理解为在get中参数的传递是直接追加在url后面的,那么此时参数形式{"id":"1","name":"jyy"}会被转化成id=1&name=jyy追加在url后面。那么在后台中就可以直接获取到了。例如:

var app = angular.module('app',[]);
    app.controller('ctrl',function($scope,$q,$http){
      var defer = $q.defer();
      var promise = defer.promise;
      $http({
        method: "get",
        params:{id:1,name:jyy},
        url:"1.PHP"
      }).success(function(data){
        defer.resolve(data);
      });
      promise.then(function(data){
        $scope.data = data;
      })
    })

在后台(php)输入echo $_GET[id]就可以正常显示了。

那么接下来就研究怎么解决post的传值了。

二、问题的解决

1. 修改请求头

第一种方法就是在ng中修改请求头将json格式改成x-www-form-urlencoded。修改方法点击即可查看。

值得注意的是,在使用第二种方法时,可以修改put,get,post,common的传参格式。因此修改哪种方式,就只能使用这种方式才能在后台得到参数。这篇博文写到使用common进行设置可以同时使用put、get、post进行传参。但是在我的实际操作中发现对common进行修改并不能使用post进行传参,而只有设置了post的请求头才可以。

另外由于在ng中的参数都是使用json格式表达,因此需要引入Jquery,使用其$.param("参数列表的json格式")进行序列化表示。

首先使用修改post请求头。具体代码如下:

var app = angular.module('app');
  
    app.config(function($httpProvider){
      $httpProvider.defaults.headers.post = { 'Content-Type': 'application/x-www-form-urlencoded' }
    })
    app.controller('ctrl',function($scope,$resource,$q,$http){
      var defer = $q.defer();
      var promise = defer.promise;
      $http({
        method: "post",
        data:$.param({"id":"1","name":"jyy"}),
        url:"1.php"
      }).success(function(data){
        defer.resolve(data);
      });
      promise.then(function(data){
        $scope.data = data;
      })
    })

此时在后台中(使用的是php),输入echo $_POST[id],就会显示。而debug其中显示的请求头正是我们设置的。

2.在后台进行解决

由于使用的是php,所以暂时用php的方法解决。在这个方法中,我们不修改请求头。因为get传值是正常的,那么,只要能够得到post的值就好。既然ng向后台传值了,即便是因为请求头不同,但是总会传过来什么的吧,既然能够传过来,就先获取它。这个时候使用$GLOBALS['HTTP_RAW_POST_DATA']将这个传过来的东西显示出来。那么这个$GLOBALS['HTTP_RAW_POST_DATA']是什么呢?在网上查询得知$HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生,PHP不能识别的Content-Type类型的时候,会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA。就是说现在这个请求头虽然是有冲突的,但是却能够显示出来。如下:

var app = angular.module('app',[]);
    app.controller('ctrl',function($scope,$q,$http){
      var defer = $q.defer();
      var promise = defer.promise;
      $http({
        method: "post",
        data:{'id':'1','name':'jyy'},
        url:"1.php"
      }).success(function(data){
        defer.resolve(data);
      });
      promise.then(function(data){
        $scope.data = data;
      })
    })

php代码:

echo $GLOBALS['HTTP_RAW_POST_DATA'];

此时显示出来的东西是:{"id":"1","name":"jyy"}。发现这个结果是正确显示了。那么直接对齐进行操作不就可以了?好吧,那就先看看是什么类型:使用gettype()得到的是string,就是说他是个json字符串。那就使用json_decode()转换,发现会报错。好吧,放弃使用这个方法。

但是此时还有另外的方法。使用file_get_contents("php://input"),这个方法中 php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。 此时这个方法就可以返回传过来的参数了。代码如下:

$a = json_decode(file_get_contents("php://input"));
  echo $a->id;

结果输出正确的id。

看完了这篇文章,相信你对“angular中如何使用post、get向后台传参”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网node.js频道,感谢各位的阅读!

--结束END--

本文标题: angular中如何使用post、get向后台传参

本文链接: https://lsjlt.com/news/72691.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • angular中如何使用post、get向后台传参
    小编给大家分享一下angular中如何使用post、get向后台传参,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、问题的来源我们都知道向后台传参可以使用get、put,其形式就类似于n...
    99+
    2024-04-02
  • Java项目中前台如何向后台传递参数
    本篇文章为大家展示了Java项目中前台如何向后台传递参数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.传字符串的形式,字符串中每个id用 “,” 隔开打印出来如下形式:前台JS代码functio...
    99+
    2023-05-31
    java ava 目中
  • jquery中怎么使用ajax向后台传递数组参数
    这篇文章给大家介绍jquery中怎么使用ajax向后台传递数组参数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。需求: 在JS中向后台传递数组参数 分析: JS中的数组是弱类型的可以放...
    99+
    2024-04-02
  • axios中如何使用GET与POST
    这篇文章主要介绍axios中如何使用GET与POST,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!axiosaxios 是一个基于 Promise 的 HTTP 客户端,专门为浏览器...
    99+
    2024-04-02
  • Java中Get和Post如何使用
    本文小编为大家详细介绍“Java中Get和Post如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中Get和Post如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1 Get请求数据1.1 ...
    99+
    2023-07-04
  • SpringMVC中如何实现前台向后台传递值
    今天就跟大家聊聊有关SpringMVC中如何实现前台向后台传递值,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、概述。在很多企业的开法中常常用到SpringMVC+Spring+H...
    99+
    2023-05-31
    springmvc 如何实现 传值
  • vue中get方法\post方法如何传递数组参数详解
    目录1、vue中get方法如何传递数组参数2、vue get与post传参方式2.1post:用data传递参数2.2get:用params传递参数附:uniapp使用uview报错...
    99+
    2023-03-23
    vue参数传递 vue的get请求传入数组参数 vue get请求传递参数
  • Android应用中如何利用get与post方式向服务器传递数据
    这篇文章将为大家详细讲解有关Android应用中如何利用get与post方式向服务器传递数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。需要在布局文件中增加两个个EditText控件和两个...
    99+
    2023-05-31
    android get post
  • vue如何向后台传递日期
    目录如何向后台传递日期给后端发送日期格式如何向后台传递日期 直接向后台传,会报错格式转化错误。 Cannot deserialize value of type `java.util...
    99+
    2024-04-02
  • vue中的get方法\post方法如何实现传递数组参数
    目录get方法\post方法如何传递数组参数第一部分:vue中get方法如何传递数组参数 下面列出我的接口格式及解决方法的源码vue get与post传参方式1.post:...
    99+
    2024-04-02
  • 如何在php中使用get和Post方法
    如何在php中使用get和Post方法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。get方式的安全性比Post方式差,但是,执行效率比Post方法好。如果包括机密信息,建...
    99+
    2023-06-15
  • vue在body和query中如何向后端传参
    目录在body和query中向后端传参dataparamsvue往后台传参(不是传对象)example在body和query中向后端传参 在vue向Django后端传参的时候,常常会...
    99+
    2024-04-02
  • jquery的ajax如何向后台传递数组
    jQuery是一款流行的前端JavaScript框架,它提供了丰富的功能和组件,其中之一就是Ajax。在Ajax中,我们经常需要向后台传递数据,无论是单个值还是多个值。本文将介绍如何使用jQuery的Ajax向后台传递数组。序列化数组在传递...
    99+
    2023-05-18
  • vue前端如何向后端传递参数
    目录前端向后端传递参数get方法传参post方法传参vue前后端传参问题前端向后端传递参数 get方法传参 get方法传参,我们只需要把要传递的参数拼接到要发送的路径地址后面。 实例...
    99+
    2024-04-02
  • vue中如何使用axios数据请求get、post方法
    小编给大家分享一下vue中如何使用axios数据请求get、post方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!vue中使用axios方法我们先安装axios这个方法npm inst...
    99+
    2024-04-02
  • Angular中父子组件间如何相互传参
    这篇文章主要介绍Angular中父子组件间如何相互传参,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一 :父组件获取子组件的数据和方法也就是说 子组件给父组件传数据和方法通过ViewChild演示例子:父组件:new...
    99+
    2023-06-15
  • 如何使用jQuery的ajax方法向服务器发出get和post请求
    这篇文章主要介绍如何使用jQuery的ajax方法向服务器发出get和post请求,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!打算写个ajax系列的博文,主要是写给自己看,学习下a...
    99+
    2024-04-02
  • PHP如何使用cURL实现Get和Post请求
    使用cURL库可以很方便地实现PHP中的GET和POST请求。GET请求:```php// 创建cURL资源$ch = curl_i...
    99+
    2023-08-15
    PHP
  • 使用PHP进行页面跳转时如何传递POST参数
    标题:PHP页面跳转中传递POST参数的实现方法 在网站开发中,经常会遇到页面跳转并需要传递POST参数的情况,这时候如何使用PHP实现对POST参数的传递就显得十分重要。本文将介绍如...
    99+
    2024-04-02
  • springcloud如何使用Feign后台内部传递MultipartFile
    目录如何使用Feign后台内部传递MultipartFile先修改FeignClient接口内部调用注意点Feign进行跨服务传递MultipartFile文件通过feign进行跨服...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作