angularjs http发布到特定元素

时间:2016-04-20 16:29:20

标签: javascript arrays angularjs json http-post

我正在尝试使用新元素找到更新服务器上文件的最佳方法。我试着查看http post / put但我收到错误并且不确定如何解决这个问题。 我的http get方法工作正常,所以这不是环境问题。

基于这里的评论是添加信息,我也更正了json文件格式。

开发环境: Visual Studio 2013,.net 4.5,iis

json数据文件位于Visual Studio解决方案下的其中一个文件夹中。 但是我只使用角度功能来开发这个单页应用程序,所以到目前为止我的代码中没有asp.net功能。 我必须添加以访问解决方案中的json文件。

我为所有者提供了一个简单的汽车应用程序,它使用http get:

从文件源加载以下数组
    owners: [{
            "name": "name1",
            "age": 29,
            "cars": [
                {
                    "carmodel": "tyota",
                    "make":  2000
                },
                {
                    "carmodel": "ford",
                    "make":  2001
                }
            ]
            },
            {
            "name": "person1",
            "age": 50,
            "cars": [
                {
                    "carmodel": "ford",
                    "make":  2011
                }
            ]
            }
        ]
来自UI的

我得到一个新的汽车对象说“person1”

car: {
        "carmodel": "BMW",
        "make":  2015
     }

我想使用httppost或任何其他最佳实践方法将其添加到文件中。

我有一个保存函数,它会抛出错误:405(方法不允许)

$scope.save = function(owner, car, $http)
{
   $scope.owners[1].cars.push(car); 
   // above is hard coded, how can filter owners with owner object?
   $http.post('url',$scope.owners);
}

我想知道服务器上的最佳实践更新文件是什么。对此的任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

首先,您的JSON不正确,因为您正在定义具有重复键/变量的所有者对象。我想你想让车主就像你的车一样。

如果我们谈论的是最佳做法,我建议您不要在服务器上保存文件并使用POST请求进行更新,因为这会允许任何人向您的服务器发送邮件并弄乱您的文件。我会改为使用数据库,或者只是在服务器运行时将JSON保留在内存中。要研究的数据库包括MySQL和MongoDB。它们非常容易获得,并且有很多社区支持。

为了更好地理解您的问题,我们需要知道您使用哪种工具/技术来提供此端点。 (Node / .NET / etc。)了解操作系统也很有帮助,但不一定重要。

答案 1 :(得分:0)

理想情况下,所有者应该是一个对象数组,如:

owners: [{
      "name": "name1",
      "age": 29,
      "cars": [
        {
            "carmodel": "tyota",
            "make":  2000
        },{
            "carmodel": "ford",
            "make":  2001
        }]
    }, {
      "name": "person1",
      "age": 50,
      "cars": [
        {
            "carmodel": "ford",
            "make":  2011
        }]
}];

然后我们假设您需要更新名为person1的人的详细信息,在列表中添加新车,请执行以下操作:

car = {“carmodel”:“anymodel”,“make”:2012}; $ scope.owners [1] .cars.push(汽车); $ http.post(url,$ scope.owners);

此外,必须遵循RESTful APIS最佳实践并使用PATCH更新任何值 每个所有者都可以拥有不同的端点,例如/owner/:id

然后只需$http({method:'PATCH', url:'/owner/1', data:data})

答案 2 :(得分:0)

通过启用CORS解决了这个问题。这是另一个stackoverflow问题的链接: jQuery .ajax() POST Request throws 405 (Method Not Allowed) on RESTful WCF