$ http.post请求在angularJS中不起作用?

时间:2014-06-14 07:03:58

标签: angularjs http post

这个问题在本网站上得到了严肃的回答,但没有一个能帮到你。所以我再问一遍:

当我发出这样的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对象不能直接发布(它们看起来一样)?是服务器端错误还是什么?解释会有所帮助。

3 个答案:

答案 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);
    });