我需要使用REST API删除Sharepoint列表中的所有项目。
我怎样才能做到这一点?
我可以使用以下方法删除单个项目:
" / _ API /网络/列表/ getByTitle(' MYLIST')/项目(' ID')"
我尝试删除ID,但它无效。
答案 0 :(得分:4)
你可以试试这个
function deleteItem(url) {
$.ajax({
url: _spPageContextInfo.webAbsoluteUrl + url,
type: "DELETE",
headers: {
"accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"If-Match": "*"
},
success: function (data) {
},
error: function (error) {
alert(JSON.stringify(error));
}
});
}
$.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 in items){
var url = "/_api/Web/Lists/getByTitle('MyList')/getItemById(item.ID)"
deleteItem(url);
}
},
error: function (error) {
alert(JSON.stringify(error));
}
});
答案 1 :(得分:2)
您必须使用上面显示的URI为列表中的每个项目进行一次删除调用,然后连续传入每个ID。如果列表中有很多项目,那么删除它可能会更便宜,更快,然后重新创建列表本身。
答案 2 :(得分:0)
您可以尝试使用此代码。但是你应该知道,这可能是你的清单中的例外情况。使用此代码后,我遇到了列表问题。我删除了所有项目,但我的ListCount属性设置为-3。我建议使用批处理请求来形成和执行请求。它会更快更安全
window.I = 0;
deleteFunction();
function deleteListItem(listTitle, listItemId, type)
{
try
{
var listItemUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/items(" + listItemId + ")";
var itemPayload = {'__metadata': {'type': type}};
$.ajax({
url: listItemUri,
type: "POST",
contentType: "application/json;odata=verbose",
headers: {
"Accept": "application/json;odata=verbose",
"X-RequestDigest" : $("#__REQUESTDIGEST").val(),
"X-HTTP-Method": "DELETE",
"If-Match": "*"
},success :function(){
console.log("deleted " + window.I);
window.I++;
deleteFunction();
},
error: function (data) {
window.I++;
deleteFunction();
}
});
}
catch(e)
{
console.log("error" + window.I);
window.I++;
}
}
function deleteFunction()
{
try
{
if(window.I > 1000) return;
deleteListItem('ListName',window.I,'SP.Data.ListNameListItem');
console.log("deleted " + window.I);
}
catch(e)
{
console.log("error" + window.I);
window.I++;
}
}