angularjs http post 到 json 特定元素的数组

angularjs http post to json array at specific element

我正在尝试找到一种使用新元素更新服务器上文件的最佳方法。我尝试查看 http post/put 但我收到错误消息并且不确定如何解决此问题。 我的http get方法没问题,不是环境问题

根据这里的评论是补充信息,我也更正了 json 文件格式。

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

json 数据文件位于 Visual studio 解决方案下的其中一个文件夹中。 但是,我只使用 angular 功能来开发这个单页应用程序,所以到目前为止我的代码中没有 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 或任何其他最佳实践方法将其添加到文件中。

我有一个保存函数,它抛出 post 错误: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);
}

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

首先,您的 JSON 是不正确的,因为您定义的所有者对象具有重复的 keys/variables。我想你希望车主像你的车一样排列。

如果我们谈论最佳实践,我不建议在您的服务器上保存文件并使用 POST 请求更新它,因为这将允许任何人 POST到您的服务器并弄乱您的文件。我会改用数据库,或者只是在 运行 时将 JSON 保存在服务器的内存中。要查看的数据库包括 MySQL 和 MongoDB。他们很容易访问并且有很多社区支持。

为了更好地理解您的问题,我们需要知道 tool/technology 您使用什么来提供此端点。 (Node/.NET/etc.)知道OS也有帮助,但不一定重要。

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

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

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

汽车 = {"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})

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