SharePoint/Angular 无法删除项目 - 错误 412
SharePoint/Angular can't delete item - Error 412
更新: 我已按如下方式更改我的服务和控制器,现在收到错误 412(HTTP/1.1 412 先决条件失败)。这是我更新的代码:
服务:
appServices.factory('appType', ['$resource', function ($resource) {
return $resource("/_api/web/lists/getbytitle('Todo Types List')/Items(:Id)", { Id: "@Id" },
{
'query': { method: "GET", isArray: false, headers: { 'Accept': 'application/json;odata=nometadata' } },
'update': { method: 'PATCH', headers: { 'Accept': 'application/json;odata=nometadata' } },
'save': { method: 'POST', headers: { 'Accept': 'application/json;odata=nometadata', 'content-type': 'application/json;odata=nometadata', 'X-RequestDigest': $("#__REQUESTDIGEST").val() } },
'delete': { method: 'DELETE', headers: { 'Accept': 'application/json;odata=nometadata', 'content-type': 'application/json;odata=nometadata', 'X-RequestDigest': $("#__REQUESTDIGEST").val() }, 'IF-MATCH': "*" },
}
);
}]);
Controller相关部分:
$scope.removeType = function (type) {
appType.delete({ Id: type.Id });
console.log("Deleted" + type.ID);
}
}]);
原文Post:
我正在尝试删除基于 SharePoint 2013 构建的 Angular 应用程序中的 item/row,但是当我尝试删除时,它似乎正在处理,只是没有从 SharePoint 中删除任何内容列表。使用 IE 中的网络选项卡,出现 400 错误。
这是我的控制器:
appControllers.controller('appSettingsCtrl', ['$scope', 'appTypes', function ($scope, appTypes) {
// Retrieve Types
$scope.types = [];
appTypes.query({}, function (data) {
$scope.types = data.value;
});
// Create Types
var typeEntry = new appTypes;
$scope.addType = function () {
console.log("Clicked");
typeEntry.Title = $scope.itemtype;
typeEntry.$save();
}
// Delete types
$scope.removeType = function (type) {
appTypes.delete({}, { Id: type.ID });
console.log("Deleted" + type.ID);
}
}]);
这是我的 HTML:
<table class="table table-striped">
<tr>
<th>Type</th>
<th>
Action
</th>
</tr>
<tr ng-repeat="type in types" id="type{{type.Id}}">
<td>
{{type.Title}}
</td>
<td>
<button type="button" class="btn btn-danger" data-ng-click="removeType(type)">Delete</button>
</td>
</tr>
</table>
这是我的服务:
appServices.factory('appTypes', ['$resource', function ($resource) {
return $resource("/_api/web/lists/getbytitle('Todo Types List')/Items", {Id: "@Id" },
{
'query': { method: "GET", isArray: false, headers: { 'Accept': 'application/json;odata=nometadata' } },
'update': { method: 'PATCH', headers: { 'Accept': 'application/json;odata=nometadata' } },
'save': { method: 'POST', headers: { 'Accept': 'application/json;odata=nometadata', 'content-type': 'application/json;odata=nometadata', 'X-RequestDigest': $("#__REQUESTDIGEST").val() } },
'delete': { method: 'DELETE', headers: { 'Accept': 'application/json;odata=nometadata', 'content-type': 'application/json;odata=nometadata', 'X-RequestDigest': $("#__REQUESTDIGEST").val(), 'IF-MATCH': '*' } },
}
);
}]);
这是一些示例 JSON:
{
"value": [
{
"FileSystemObjectType": 0,
"Id": 5,
"ID": 5,
"ContentTypeId": "0x01004CE051F4BDBACB43BB22C234F8F497FE",
"Title": "Type 1",
"Modified": "2015-03-13T18:35:09Z",
"Created": "2015-03-13T18:35:09Z",
"AuthorId": 12,
"EditorId": 12,
"OData__UIVersionString": "1.0",
"Attachments": false,
"GUID": "9ceee022-a418-43d4-86b1-1de6d68edc47"
}
]
}
将此错误归咎于 header 格式错误的小拼写错误(If-Match 在 header 之外:。这是正确的:
'delete': { method: 'DELETE', headers: { 'Accept': 'application/json;odata=verbose', 'content-type': 'application/json;odata=verbose', 'X-RequestDigest': $("#__REQUESTDIGEST").val(), 'IF-MATCH': '*' } }
我在从列表中删除项目时使用以下 headers。
"accept": "application/json;odata=verbose",
"content-type": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"If-Match": "*",
"X-Http-Method": "DELETE".
对我来说很管用。希望对你也有帮助。
更新: 我已按如下方式更改我的服务和控制器,现在收到错误 412(HTTP/1.1 412 先决条件失败)。这是我更新的代码:
服务:
appServices.factory('appType', ['$resource', function ($resource) {
return $resource("/_api/web/lists/getbytitle('Todo Types List')/Items(:Id)", { Id: "@Id" },
{
'query': { method: "GET", isArray: false, headers: { 'Accept': 'application/json;odata=nometadata' } },
'update': { method: 'PATCH', headers: { 'Accept': 'application/json;odata=nometadata' } },
'save': { method: 'POST', headers: { 'Accept': 'application/json;odata=nometadata', 'content-type': 'application/json;odata=nometadata', 'X-RequestDigest': $("#__REQUESTDIGEST").val() } },
'delete': { method: 'DELETE', headers: { 'Accept': 'application/json;odata=nometadata', 'content-type': 'application/json;odata=nometadata', 'X-RequestDigest': $("#__REQUESTDIGEST").val() }, 'IF-MATCH': "*" },
}
);
}]);
Controller相关部分:
$scope.removeType = function (type) {
appType.delete({ Id: type.Id });
console.log("Deleted" + type.ID);
}
}]);
原文Post:
我正在尝试删除基于 SharePoint 2013 构建的 Angular 应用程序中的 item/row,但是当我尝试删除时,它似乎正在处理,只是没有从 SharePoint 中删除任何内容列表。使用 IE 中的网络选项卡,出现 400 错误。
这是我的控制器:
appControllers.controller('appSettingsCtrl', ['$scope', 'appTypes', function ($scope, appTypes) {
// Retrieve Types
$scope.types = [];
appTypes.query({}, function (data) {
$scope.types = data.value;
});
// Create Types
var typeEntry = new appTypes;
$scope.addType = function () {
console.log("Clicked");
typeEntry.Title = $scope.itemtype;
typeEntry.$save();
}
// Delete types
$scope.removeType = function (type) {
appTypes.delete({}, { Id: type.ID });
console.log("Deleted" + type.ID);
}
}]);
这是我的 HTML:
<table class="table table-striped">
<tr>
<th>Type</th>
<th>
Action
</th>
</tr>
<tr ng-repeat="type in types" id="type{{type.Id}}">
<td>
{{type.Title}}
</td>
<td>
<button type="button" class="btn btn-danger" data-ng-click="removeType(type)">Delete</button>
</td>
</tr>
</table>
这是我的服务:
appServices.factory('appTypes', ['$resource', function ($resource) {
return $resource("/_api/web/lists/getbytitle('Todo Types List')/Items", {Id: "@Id" },
{
'query': { method: "GET", isArray: false, headers: { 'Accept': 'application/json;odata=nometadata' } },
'update': { method: 'PATCH', headers: { 'Accept': 'application/json;odata=nometadata' } },
'save': { method: 'POST', headers: { 'Accept': 'application/json;odata=nometadata', 'content-type': 'application/json;odata=nometadata', 'X-RequestDigest': $("#__REQUESTDIGEST").val() } },
'delete': { method: 'DELETE', headers: { 'Accept': 'application/json;odata=nometadata', 'content-type': 'application/json;odata=nometadata', 'X-RequestDigest': $("#__REQUESTDIGEST").val(), 'IF-MATCH': '*' } },
}
);
}]);
这是一些示例 JSON:
{
"value": [
{
"FileSystemObjectType": 0,
"Id": 5,
"ID": 5,
"ContentTypeId": "0x01004CE051F4BDBACB43BB22C234F8F497FE",
"Title": "Type 1",
"Modified": "2015-03-13T18:35:09Z",
"Created": "2015-03-13T18:35:09Z",
"AuthorId": 12,
"EditorId": 12,
"OData__UIVersionString": "1.0",
"Attachments": false,
"GUID": "9ceee022-a418-43d4-86b1-1de6d68edc47"
}
]
}
将此错误归咎于 header 格式错误的小拼写错误(If-Match 在 header 之外:。这是正确的:
'delete': { method: 'DELETE', headers: { 'Accept': 'application/json;odata=verbose', 'content-type': 'application/json;odata=verbose', 'X-RequestDigest': $("#__REQUESTDIGEST").val(), 'IF-MATCH': '*' } }
我在从列表中删除项目时使用以下 headers。
"accept": "application/json;odata=verbose",
"content-type": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"If-Match": "*",
"X-Http-Method": "DELETE".
对我来说很管用。希望对你也有帮助。