• 技术文章 >web前端 >html教程

    angular的post传参后台php无法接收 - 范丁文

    2016-05-21 08:35:14原创496
    很多时候我们需要用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; ii) {
              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;
      }];
    });

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:angular的post传参后台php无法接收 - 范丁文
    上一篇:HTML无刷新提交表单 - jerrylsxu 下一篇:表单标签元素 - 尼农小道
    Web大前端开发直播班

    相关文章推荐

    • html5元素的分类有哪些• web前端笔试题库之HTML篇• javascript的浏览器对象• ExtJs教程14• 关于常用meta的总结 - 冰阡陌

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网