这是我第一次与AngulerJS合作。我试图将POST
数据发送到服务器。
AngularJS代码
var app = angular.module("myApp", []);
var BASE_URL = "http://localhost/project/api/Data/";
var GET_DATA = BASE_URL+"get_data";
console.log(GET_DATA);
app.controller('myCtrl', function($scope, $http) {
var inputs = { "user_id": "3"};
var config = {
headers : {
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;'
}
}
$http.post(GET_DATA , inputs, config)
.success(function (response, status, headers, config) {
$scope.content = response.error;
$scope.statuscode = response.status;
$scope.statustext = response.statusInfo;
console.log(response);
})
.error(function (data, status, header, config) {
$scope.ResponseDetails = "Data: " + data +
"<hr />status: " + status +
"<hr />headers: " + header +
"<hr />config: " + config;
});
});
此代码将数据发布到服务器,但使用有线格式。以下是我的print_r($_POST);
结果:
Array
(
[{"user_id":"3"}] =>
[0] =>
)
这是错误的结果,我期待像
这样的东西Array
(
user_id => 3
)
注意:我在服务器端使用CodeIgniter框架。
答案 0 :(得分:1)
您可以在json
发送您的帖子数据:
$http.post(GET_DATA , {"user_id": "3"})
.success(function (response, status, headers, config) {
$scope.content = response.error;
$scope.statuscode = response.status;
$scope.statustext = response.statusInfo;
console.log(response);
})
.error(function (data, status, header, config) {
$scope.ResponseDetails = "Data: " + data +
"<hr />status: " + status +
"<hr />headers: " + header +
"<hr />config: " + config;
});
});
在服务器端,你可以得到这样的帖子数据:
$postdata = json_decode(file_get_contents('php://input'));
print_r($postdata);
当请求内容类型为application / x-www-form-urlencoded`时,您必须以urlencoded
格式对帖子正文中的数据进行编码。这应该是这样的:
var inputs = 'student_id=3';
答案 1 :(得分:1)
虽然写下旧问题的答案不是正确的做法,但我想发布这个答案,以便其他人可以随时提供帮助。
首先,要了解发生这种事情的原因。原因是,AngularJS不会自动序列化传递给POST请求的数据(参数)。因此,我们必须使用 <camelContext id="camel" trace="true" xmlns="http://camel.apache.org/schema/spring">
<route id="demo-rest-route">
<from uri="activemq:queue:demo.rest"/>
<!--<setBody inheritErrorHandler="true" id="setBody2">
<simple>name=${body}</simple>
</setBody>-->
<setHeader headerName="Content-Type" inheritErrorHandler="true" id="setHeader3">
<constant>Content-Type: application/json;</constant>
</setHeader>
<setHeader headerName="Exchange.HTTP_METHOD">
<constant>POST</constant>
</setHeader>
<toD uri="http://localhost:8181/cxf/person" />
</route>
</camelContext>
序列化数据,该数据可用作AngularJS服务。此外,发布数据的默认内容类型是application / json。因此,我们需要将post请求的Content-type标头覆盖到application / x-www-form-urlencoded,以便通过$ _POST访问发布的值。
现在在角度中也提供了$httpParamSerializerJQLike
服务,但差异$httpParamSerializer
是包含另一个对象的对象,因此如果使用前者,则内部对象将不会被序列化,即所有嵌套对象都赢了不能使用$httpParamSerializerJQLike
序列化,但$httpParamSerializer
不是这种情况。
您可以在此处查看差异:AngularJS $httpParamSerializer service DOC
现在,我们可以通过在角度JS中使用$httpParamSerializerJQLike
服务,以json
编码和解码php
中的数据,而不是$httpParamSerializerJQLike
编码和解码数据:
$http({
url: myUrl, //post your url here
method: 'POST',
data: $httpParamSerializerJQLike({ 'user_id': '3'}),
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
在codeigniter中,您可以按正常语法(即$this->input->post('user_id');
有关更多信息......您可以参考上面提到的链接......
希望它可以帮到你......