多个列表项删除SharePoint rest api“来自HRESULT的异常:0x80131904”

时间:2018-04-12 08:16:20

标签: sharepoint sharepoint-2013 office365api

要删除SharePoint中的所有列表项,我尝试了以下代码,但我大部分时间都会收到500内部服务器错误以进行REST调用。如果列表项少于5,那么代码工作正常。

$.ajax({
 url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getByTitle('TestList')/items",
type: "GET",
headers: {
    "accept": "application/json;odata=verbose",
},
success: function (data) {
    var items = data.d.results;
    for(var item in items){
        var itemUrl = _spPageContextInfo.webAbsoluteUrl + "/_api/Web/Lists/getByTitle('TestList')/getItemById(" + item.ID + ")";
        deleteItem(itemUrl, item.__metadata);
    }
},
error: function (error) {
    console.log(JSON.stringify(error));
 }
});

function deleteItem(itemUrl, metadata) {
$.ajax({
    url: itemUrl,
    type: "DELETE",
    headers: {
        "accept": "application/json;odata=verbose",
        "X-RequestDigest": $("#__REQUESTDIGEST").val(),
        "If-Match": metadata.etag
    },
    success: function (data) {
        console.log("deleted item")
    },
    error: function (error) {
        console.log(JSON.stringify(error));
    }
 });
}

我尝试过“If-Match”:*和etag但没有成功。我在这里做错了吗?

2 个答案:

答案 0 :(得分:0)

这通常是由以下原因引起的:
tempdb或您的内容数据库空间不足。

数据库上的自动增长设置太小。

空间不足很容易理解,但是引起这种情况的自动增长设置不太明显。如果数据库(数据或日志)空间不足,它将尝试“声明”自动增长设置所定义的额外存储空间。如果此值太小,则新声明的空间可能不足,从而导致其出错或尝试声明更多的空间。声明存储系统上的空间通常很快,但是它依赖于操作系统响应请求,并且如果存储子系统非常忙,则它可能花费比SQL Server愿意等待的时间更长的时间,从而引发异常。我远离“百分比”增长设置,并至少使用100MB作为“增长依据”值。如果您的存储空间受到严重限制,建议您尽可能多地声明数据所有权,同时还要为日志保留足够的空间。没有“定”答案。这取决于您有多少空间以及数据库/站点的活跃程度。

答案 1 :(得分:0)

这是一篇旧文章,但是我还是想分享解决方案。

您在这里做的错误是您在遍历项目数组时正在使用in。您应该改为使用of。然后,您将获得正确的ID。否则,您将获得数组中该项的索引。

更改此:

for (var item in items) 

对此:

for (var item of items) 

完整代码:

$.ajax({
    url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getByTitle('MyList')/items",
    type: "GET",
    headers: {
        "accept": "application/json;odata=verbose",
    },
    success: function (data) {
        var items = data.d.results;

        for (var item of items) {
            var itemUrl = _spPageContextInfo.webAbsoluteUrl + "/_api/Web/Lists/getByTitle('MyList')/getItemById(" + item.ID + ")";
            deleteItem(itemUrl, item.__metadata);
        }
    },
    error: function (error) {
        console.log(JSON.stringify(error));
    }
});

function deleteItem(itemUrl, metadata) {
    $.ajax({
        url: itemUrl,
        type: "DELETE",
        headers: {
            "accept": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val(),
            "If-Match": metadata.etag
        },
        success: function (data) {
            console.log("deleted item")
        },
        error: function (error) {
            console.log(JSON.stringify(error));
        }
    });
}