有人能告诉我为什么下面的语句没有将post数据发送到指定的url吗?url被调用,但在服务器上,当我打印$_POST -我得到一个空数组。如果我在控制台中打印消息,然后将其添加到数据-它显示了正确的内容。
$http.post('request-url', { 'message' : message });
我也尝试过将数据作为字符串(具有相同的结果):
$http.post('request-url', "message=" + message);
当我以以下格式使用它时,它似乎正在工作:
$http({
method: 'POST',
url: 'request-url',
data: "message=" + message,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
但是是否有一种方法可以用$http.post() -我总是必须包括头以便它工作吗?我相信上面的内容类型是指定发送数据的格式,但我可以把它作为javascript对象发送吗?
这个问题最终在angular 1.4中使用$httpParamSerializerJQLike解决了
参见https://github.com/angular/angular.js/issues/6039
.controller('myCtrl', function($http, $httpParamSerializerJQLike) {
$http({
method: 'POST',
url: baseUrl,
data: $httpParamSerializerJQLike({
"user":{
"email":"wahxxx@gmail.com",
"password":"123456"
}
}),
headers:
'Content-Type': 'application/x-www-form-urlencoded'
})})
我在使用AngularJS和Node.js + Express 4 + Router时也遇到了同样的问题
路由器期望从post的请求中得到数据。如果我遵循Angular Docs中的例子,这个主体总是空的
符号1
$http.post('/someUrl', {msg:'hello word!'})
但如果我把它用在数据中
符号2
$http({
withCredentials: false,
method: 'post',
url: yourUrl,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
data: postData
});
编辑1:
否则node.js路由器将期望req中的数据。正文(如使用符号1):
req.body.msg
它还将信息作为JSON有效负载发送。在json和x-www-form-urlencoded中有数组的某些情况下,这是更好的。
它工作。希望能有所帮助。
与JQuery不同,出于学究的考虑,Angular使用JSON格式进行POST
数据从客户端传输到服务器端(JQuery应用x-www-form-urlencoded,尽管JQuery和Angular使用JSON进行数据输入)。因此有两个部分的问题:在js客户端部分和在你的服务器部分。所以你需要:
把js的Angular客户端部分像这样放:
http({美元
方法:“文章”,
url:“请求url”,
data: {'message': 'Hello world'}
});
AND
写入服务器部分以接收来自客户端的数据(如果是php)。
$data = file_get_contents("php://input");
$ datasondecode = json_decode($data);
$message = $dataJsonDecode->消息;
echo $消息;/ /“Hello world”
注意:$_POST将不起作用!
希望这个方法对我有用,对你也有用。