angular的post传参后台php无法接收

很多时候我们需要用ajax提交post数据,angularjs与jq类似,也有封装好的post。

但是jQuery的post明显比angularjs的要简单一些,人性化一些。

两者看起来没什么区别,用angularjs的$http提交的数据,在php服务器端却无法通过$_REQUEST/$_POST获取到。

这是因为两者的post对header的处理有所不同……jQuery会把作为JSON对象的myData序列化,而Angular不会。

解决方案:

修改Angular的$httpProvider的默认处理(最完美的解决方案)

angular.module(‘MyModule‘, [], function($httpProvider) {
  // Use x-www-form-urlencoded Content-Type
  $httpProvider.defaults.headers.post[‘Content-Type‘] = ‘application/x-www-form-urlencoded;charset=utf-8‘;

  /**
   * The workhorse; converts an object to x-www-form-urlencoded serialization.
   * @param {Object} obj
   * @return {String}
   */
  var param = function(obj) {
    var query = ‘‘, name, value, fullSubName, subName, subValue, innerObj, i;

    for(name in obj) {
      value = obj[name];

      if(value instanceof Array) {
        for(i=0; i<value.length; ++i) {
          subValue = value[i];
          fullSubName = name + ‘[‘ + i + ‘]‘;
          innerObj = {};
          innerObj[fullSubName] = subValue;
          query += param(innerObj) + ‘&‘;
        }
      }
      else if(value instanceof Object) {
        for(subName in value) {
          subValue = value[subName];
          fullSubName = name + ‘[‘ + subName + ‘]‘;
          innerObj = {};
          innerObj[fullSubName] = subValue;
          query += param(innerObj) + ‘&‘;
        }
      }
      else if(value !== undefined && value !== null)
        query += encodeURIComponent(name) + ‘=‘ + encodeURIComponent(value) + ‘&‘;
    }

    return query.length ? query.substr(0, query.length - 1) : query;
  };

  // Override $http service‘s default transformRequest
  $httpProvider.defaults.transformRequest = [function(data) {
    return angular.isObject(data) && String(data) !== ‘[object File]‘ ? param(data) : data;
  }];
});
时间: 2024-10-06 14:21:03

angular的post传参后台php无法接收的相关文章

angular之url传参

利用angular传参可以通过js调用出发$state.go事件或者利用ui-sref="url" 1.$state.go  应用在方法中 $state.go('URL',{name: owen, age:18}); 2.ui-sref="url"  绑定在DOM上 ui-sref="url({name: owen, age:18})" 其实ui-sref最后还是调用的$state.go()方法. 在接受参数页面注入$stateParams获取参

Layui upload多图片上传, 传参后台接受不到

Layui upload动态传参,后台接收不到,解决方法 这里参数动态($(#).val())拿去不到,除非写死,必须要用before从新赋值 layui.config({ base: '/Assets/layui/' //静态资源所在路径 }).extend({ index: 'lib/index' //主入口模块 }).use(['index', 'upload'], function () { var $ = layui.jquery , upload = layui.upload; va

4,如何开发一个java开源框架-----Jvn框架之实现浏览器传参后台转成Bean

前言:博主正在教大家框架原理跟如何实现一个J2ee框架,大家如果想看的可以从 第一篇博文看起 所有的视频都是连续的. 上节课说到了找出一个Bean的方法,这节课主要讲浏览器传递的参数在后台如何生成Bean 1,先把浏览器传过来的参数放进map里面 key-->value2,遍历map,找出key,从而拼凑出setXXX.3,找出需要转的Bean的所有set方法跟simpleName4,通过反射机制,invoke()设置值进去.5,生成一个想要的对象 视频以及对应的源码地址: http://pan

curl post传参非数组不能接收啊

$post_data = "13"; $url="http://mytp.com:801/Home/Index/getcurl";$c = curl_init(); curl_setopt($c, CURLOPT_URL, $url); curl_setopt($c, CURLOPT_CUSTOMREQUEST, "POST");curl_setopt($c, CURLOPT_POSTFIELDS, $post_data);curl_setopt

springmvc 传参和接收参数

对于springmvc接收参数有那些方式,下面我写了几个. 先创建项目,导入jar包配置web.xml ,springmvc-servlet.xml上面有过介绍,在本章最下面配置信息也写了出来. 通过HttpServletRequest 获取参数 @RequestMapping(value="par1.do") public ModelAndView par1(HttpServletRequest request){ // 接收前台传来的参数 String userName = req

前端Vue框架 04 路由:逻辑跳转、路由传参 项目组件的数据局部化处理data(){ return{} } 组件的声明周期 组件间通信 各种第三方插件(vuex,axios,element-ui,(jq+bs))

项目初始化 """ 1)根组件:App.vue <template> <div id="app"> <router-view /> </div> </template> 2)路由配置:router/index.js const routes = [ { path: '/', name: 'Home', component: Home } ]; 3)组件:views和components文件夹 i)

vue-router传参的坑(query和params)

1.query方式传参和接收参数 传参: this.$router.push({ path:'/xxx' query:{ id:id } }) 接收参数: this.$route.query.id 注意:传参是this.$router,接收参数是this.$route,这里千万要看清了!!! this.$router 和this.$route有何区别?在控制台打印两者可以很明显的看出两者的一些区别: 1.$router为VueRouter实例,想要导航到不同URL,则使用$router.push

vue-router query和params传参(接收参数)的区别

版权声明: https://blog.csdn.net/youth_lx/article/details/79780938 <div class="markdown_views"> <!-- flowchart 箭头图标 勿删 --> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap=&q

vue-router路由传参之query和params

首先简单来说明一下$router和$route的区别 //$router : 是路由操作对象,只写对象 //$route : 路由信息对象,只读对象 //操作 路由跳转 this.$router.push({ name:'hello', params:{ name:'word', age:'11' } }) //读取 路由参数接收 this.name = this.$route.params.name; this.age = this.$route.params.age; 1·query传递参数