记录我工作学习生活中的点点滴滴......

angularjs使用$http.post无法使用$_POST接收不到参数的解决办法
发布于 AngularJS
2014-10-09 18:31:12
7395
0

感谢罗飞告之

在使用angularjs给php后端post数据时,发现使用$_POST无法正常接收数据,发现在php://input中格式为json格式,我们可以直接在php端增加hook,对这些数据进行decode然后merge到$_POST数组中,但是yaf框架是不建议修改$_POST内容的,修改后也无法通过下面的方式获取。

Yaf_Dispatcher::getInstance()->getRequest()->getPost()

这只能从angularjs本身来解决了,查询了一些资料,在stackoverflow看到了类似的问题,也看到了老外的一些解决思路,后来咨询了罗飞,使用数据拦截解决了这个问题。

.config(function($httpProvider){
    //对php的post处理
    $httpProvider.defaults.transformRequest = function(request){
     if(typeof(request)!='object')
     {
            return request;
     }
     var str = [];
     for(var k in request){
        if(k.charAt(0)=='$'){
                delete request[k];
                 continue;
        }
       var v='object'==typeof(request[k])?JSON.stringify(request[k]):request[k];
       str.push(encodeURIComponent(k) + "=" + encodeURIComponent(v));
     }
     return str.join("&");
   };
   $httpProvider.defaults.timeout=10000;
   $httpProvider.defaults.headers.post = {
        'Content-Type': 'application/x-www-form-urlencoded'
   };
})

还有个小遗憾,虽然解决了问题但是使用pt framework框架的IS_AJAX无法判断这个是ajax请求,这个解决到时容易,在增加一个header头即可,与jquery一样,把X-Requested-With设置为XMLHttpRequest,优化后的如下

.config(function($httpProvider){
	//对php的post处理
	$httpProvider.defaults.transformRequest = function(request){
		if(typeof(request)!='object'){
			return request;
		}
		var str = [];
		for(var k in request){
			if(k.charAt(0)=='$'){
				delete request[k];
				continue;
			}
			var v='object'==typeof(request[k])?JSON.stringify(request[k]):request[k];
			str.push(encodeURIComponent(k) + "=" + encodeURIComponent(v));
		}
		return str.join("&");
	};
	$httpProvider.defaults.timeout=10000;
	$httpProvider.defaults.headers.post = {
		'Content-Type': 'application/x-www-form-urlencoded',
		'X-Requested-With': 'XMLHttpRequest'
	};
})





分享本文到:
除非特殊注明,本文版权归原作者所有,欢迎转载!转载请注明版权以及本文地址,谢谢。
转载保留版权:Pakey's BLog >>AngularJS >>angularjs使用$http.post无法使用$_POST接收不到参数的解决办法
本文地址:http://www.pakey.net/blog/angularjsZaiHephpJieHeShiWuFaShiYong-_POSTJieShouD.html