这个问题在本网站上得到了严肃的回答,但没有一个能帮到你。所以我再问一遍:
当我发出这样的POST请求时:
var sectionTypeVM = new Object();
sectionTypeVM.SectionTypeId = 0;
sectionTypeVM.Name = $scope.message;
$http({
method: 'POST',
url: 'http://mtapi.azurewebsites.net/api/sectiontype',
dataType: 'json',
data: sectionTypeVM,
headers: { 'Content-Type': 'application/json; charset=UTF-8' }
}).success(function (data) {
alert(data);
}).error(function (data) {
alert(data);
});
它完全正常,但当我尝试做这样的事情时:
$http({
method: 'POST',
url: 'http://mtapi.azurewebsites.net/api/sectiontype',
dataType: 'json',
data: $scope.message,
headers: { 'Content-Type': 'application/json; charset=UTF-8' }
}).success(function (data) {
alert(data);
}).error(function (data) {
alert(data);
});
它没有。为什么我需要以javascript的方式创建一个单独的对象并发送它,为什么我的angularJS对象不能直接发布(它们看起来一样)?是服务器端错误还是什么?解释会有所帮助。
答案 0 :(得分:2)
您的2个帖子之间的主要区别在于,第一个帖子发回一个带有两个字段的对象(Name和SectionTypeId),而第二个帖子只发回$ scope.message的内容。 我可能错了,但看起来$ scope.message是一个字符串。但是,您要将content-type设置为application / json。
两者之间的差异是第一篇帖子发送此对象:
{
SectionTypeId: 0,
Name: [
{"name"="abc", "id"="1"},
{"name"="bcd", "id"="2"}
]
}
第二篇文章发送此数组:
[
{"name"="abc", "id"="1"},
{"name"="bcd", "id"="2"}
]
您需要重新构建代码,以便$ scope.message是服务器接受的有效json对象,或者将$ scope.message包装在对象中,就像第一个示例一样。
答案 1 :(得分:2)
第一个是发送sectionTypeVM
这是一个JavaScript对象,第二个是发送$scope.message
,我假设它是从sectionTypeVM.Name
分配的字符串。两者不完全相同。
虽然在这个简单示例中var sectionTypeVM = new Object()
与var sectionTypeVM = {}
相同,但后者更清楚地演示了sectionTypeVM是对象文字的意图。由于您要将JSON发送到服务器,因此应首选对象文字表示法。
我假设$ scope.message只是一个字符串(或数组)。第二个示例不起作用的原因很可能是因为$ scope.message不是对象文字,并且您已将json
指定为预期的数据格式。对象文字必须遵循以下格式:
var sectionTypeVM = {
property: 'foo',
property: 'bar'
};
如果您想修改第二个示例以使其正常工作,您可以将数据有效负载更改为对象文字符号:
$http({
method: 'POST',
url: 'http://mtapi.azurewebsites.net/api/sectiontype',
dataType: 'json',
data: { Name: $scope.message },
headers: { 'Content-Type': 'application/json; charset=UTF-8' }
})
答案 2 :(得分:1)
如果您的服务器接受第一个请求,您可以像这样发布
$http({
method: 'POST',
url: 'http://mtapi.azurewebsites.net/api/sectiontype',
dataType: 'json',
data: {SectionTypeId:0, Name: $scope.message},
headers: { 'Content-Type': 'application/json; charset=UTF-8' }
}).success(function (data) {
alert(data);
}).error(function (data) {
alert(data);
});