Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest Angular JS:在PUT请求中发送表单字段数据(就像POST一样)_Rest_Angularjs - Fatal编程技术网

Rest Angular JS:在PUT请求中发送表单字段数据(就像POST一样)

Rest Angular JS:在PUT请求中发送表单字段数据(就像POST一样),rest,angularjs,Rest,Angularjs,我正在尝试编写一个客户端,它完成了所有四个REST动词(GET/POST/PUT/DELETE),并且完成了除PUT之外的所有操作。我使用的REST/CRUDAPI希望通过调用PUT/realmen/ID字符串并将键值对作为JSON包含来更新条目。对于一个帖子来说,这似乎“自动”起作用,但对于一个看跌期权来说则不然 我的HTML看起来像: <div id="list"> <form novalidate class="edit-form"> <p>Title

我正在尝试编写一个客户端,它完成了所有四个REST动词(GET/POST/PUT/DELETE),并且完成了除PUT之外的所有操作。我使用的REST/CRUDAPI希望通过调用PUT/realmen/ID字符串并将键值对作为JSON包含来更新条目。对于一个帖子来说,这似乎“自动”起作用,但对于一个看跌期权来说则不然

我的HTML看起来像:

<div id="list">
<form novalidate class="edit-form">
<p>Title <input ng-model="realmen.title" type="text" value="{{realmen.title}}" /></p>
<p>Real Men <input ng-model="realmen.realmen" type="text" value="{{realmen.realmen}}" />  </p>
<p>Real Role-Players <input ng-model="realmen.realroleplayers" type="text" value="realmen.realroleplayers}}" /></p>
<p>Loonies <input ng-model="realmen.loonies" type="text" value="{{realmen.loonies}}" /></p>
<p>Munchkins <input ng-model="realmen.munchkins" type="text" value="{{realmen.munchkins}}" /></p>
<input ng-model="realmen.entryId" type="hidden" value="{{entryId}}"/>
<button ng-click="change()">UPDATE ({{entryId}})"</button></p>
</form>
</div>
$scope.realmen = RealMen.get({entryId: $routeParams.entryId}, function() {
      $scope.master = angular.copy($scope.realmen); // For resetting the form
});

$scope.change = function() {
    console.log($scope.realmen);
    RealMen.update({entryId: $scope.entryId}, function() {
            $location.path('/');
    });
}
最后,我的服务看起来像:

angular.module('realmenServices', ['ngResource']).
factory('RealMen', function($resource){
    var RealMen = $resource(
        'http://localhost\\:3000/realmen/:entryId',
        {},
        {
                query: {method:'GET', params:{entryId:''}, isArray:true},
                post: {method:'POST'},
                update: {method: 'PUT', params:{entryId:'@entryId'}},
                remove: {method:'DELETE'}
        });

    return RealMen;
});
将使用URL中正确的id值调用PUT,但请求负载仅包含entryId,因此后端API不会获得预期的键和值,并且基本上会清空数据库中的记录


log($scope.realmen)确实显示了表单字段以及大量额外数据。我尝试调用RealMen.update($scope.RealMen,…)(类似于调用.save()),但所有这些额外字段都以一种非常丑陋的方式作为查询字符串参数附加到URL上。

因为您的
$scope.RealMen
是一个资源实例,而不是使用
RealMen.update
,您只需调用
$scope.realmen.$update()
(注意有一个“$”)。实例操作方法将负责为您发送数据。

再次感谢您,jaux。$update正在使用正确的格式(/realmen/ID string)调用PUT URL,但有效负载有两个额外字段(_ID和entryID),并导致来自MongoDB的错误:错误更新条目:MongoError:无法更改文档的_ID旧:{u ID:ObjectId('51ce617853c6f6000000001'),entryID:'51ce617853c6f6000000001'}新:{ID:“51CE617853C6F6000000001”,entryId:“51CE617853C6F6000000001”,标题:“A”,真人:“B”,真人角色扮演者:“C”,疯子:“D”,芒奇金斯:“E”}有没有办法从请求负载中去掉这些?