【问题标题】:angularjs http post to json array at specific elementangularjs http发布到特定元素的json数组
【发布时间】:2016-08-13 11:46:10
【问题描述】:

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

这里基于cmets是添加信息,我也更正了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);
}

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

【问题讨论】:

  • 你尝试使用PUT方法了吗?而不是POST?您可以检查服务器接受的协议类型。
  • $httppost 应该是 $http.post
  • 你的服务器端技术是什么?
  • 我的服务器在 microsoft windows 上。
  • 我在使用 PUT 方法时遇到同样的错误。 405(不允许的方法)。项目在 Visual Studio 上。

标签: javascript arrays angularjs json http-post


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    对于初学者,您的 JSON 不正确,因为您正在定义具有重复键/变量的所有者对象。我认为您希望车主像您的汽车一样阵列。

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

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

    【讨论】:

    • 我理解您对内存数据库的担忧。我正在尝试使用 angular 构建一个简单的 html 网站,并尝试在 iphone 或 andriod 应用程序的框架下使用它。数据源只是一个 json 文件,如您在上面看到的。谢谢你的回答。
    【解决方案3】:

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

    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(car); $http.post(url, $scope.owners);

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

    那么简单$http({method:'PATCH', url:'/owner/1', data:data})

    【讨论】:

    • 感谢您指出所有者文件的问题。我已经修复了原始帖子中的格式 - 这是我这边的一个错字。我也在做你提到的同样的事情: car = {"carmodel": "anymodel", "make": 2012}; $scope.owners[1].cars.push(car); $http.post(url, $scope.owners);但它抛出错误 405(不允许方法)。我的 http get 方法工作正常。
    • 试过方法:PATCH?
    猜你喜欢
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 2017-01-20
    • 2021-06-21
    • 2013-09-06
    • 1970-01-01
    • 2018-04-19
    • 2016-08-18
    相关资源
    最近更新 更多