如何使用 SharePoint 2010 REST 接口执行 CRUD 操作

创建

要通过 REST 执行创建操作,必须执行以下操作:

使用 POST 动词创建 HTTP 请求。使用要将实体添加到其中的列表的服务 URL 作为 POST 的目标。将内容类型设置为 application/json。将表示新列表项的 JSON 对象序列化为字符串,并将此值添加到请求正文 JavaScript 示例中:

function createListItem(webUrl,listName, itemProperties, success, failure) {

    $.ajax({
        url: webUrl + "/_vti_bin/listdata.svc/" + listName,
        type: "POST",
        processData: false,
        contentType: "application/json;odata=verbose",
        data: JSON.stringify(itemProperties),
        headers: {
            "Accept": "application/json;odata=verbose"
        },
        success: function (data) {
            success(data.d);
        },
        error: function (data) {
            failure(data.responseJSON.error);
        }
    });
}

用法

var taskProperties = {
    'TaskName': 'Order Approval',
    'AssignedToId': 12
};

createListItem('https://contoso.sharepoint.com/project/','Tasks',taskProperties,function(task){
    console.log('Task' + task.TaskName + ' has been created'); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);

要通过 REST 执行读取操作,必须执行以下操作:

使用 GET 动词创建 HTTP 请求。使用要将实体添加到其中的列表项的服务 URL 作为 GET 的目标。将内容类型设置为 application/json。JavaScript 示例:

function getListItemById(webUrl,listName, itemId, success, failure) {
    var url = webUrl + "/_vti_bin/listdata.svc/" + listName + "(" + itemId + ")";
    $.ajax({
        url: url,
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data) {
            success(data.d);
        },
        error: function (data) {
            failure(data.responseJSON.error);
        }
    });
}

用法

getListItemById('https://contoso.sharepoint.com/project/','Tasks',2,function(taskItem){
    console.log(taskItem.TaskName); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);

更新

要更新现有实体,你必须执行以下操作:

使用 POST 动词创建 HTTP 请求。添加 X-HTTP-Method 标头,其值为 MERGE。使用要更新的列表项的服务 URL 作为 POST 的目标添加 If-Match 标头,其值为实体的原始 ETag 或*。JavaScript 示例:

function updateListItem(webUrl,listName,itemId,itemProperties,success, failure)
{
   getListItemById(webUrl,listName,itemId,function(item){

      $.ajax({
         type: 'POST',
         url: item.__metadata.uri,
         contentType: 'application/json',
         processData: false,
         headers: {
                "Accept": "application/json;odata=verbose",
                "X-HTTP-Method": "MERGE",
                "If-Match": item.__metadata.etag
         },
         data: Sys.Serialization.JavaScriptSerializer.serialize(itemProperties),
         success: function (data) {
                success(data);
         },
         error: function (data) {
                failure(data);
         }
      });

   },
   function(error){
       failure(error);
   });

}

用法

var taskProperties = {
    'TaskName': 'Approval',
    'AssignedToId': 12  
};

updateListItem('https://contoso.sharepoint.com/project/','Tasks',2,taskProperties,function(item){
    console.log('Task has been updated'); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);

删除

要删除实体,你必须执行以下操作:

使用 POST 动词创建 HTTP 请求。添加 X-HTTP-Method 标头,其值为 DELETE。使用要更新的列表项的服务 URL 作为 POST 的目标添加 If-Match 标头,其值为实体的原始 ETag。JavaScript 示例:

function deleteListItem(webUrl, listName, itemId, success, failure) {
    getListItemById(webUrl,listName,itemId,function(item){
        $.ajax({
            url: item.__metadata.uri,
            type: "POST",
            headers: {
                "Accept": "application/json;odata=verbose",
                "X-Http-Method": "DELETE",
                "If-Match": item.__metadata.etag
            },
            success: function (data) {
                success();
            },
            error: function (data) {
                failure(data.responseJSON.error);
            }
        });
    },
   function (error) {
       failure(error);
   });
}

用法

deleteListItem('https://contoso.sharepoint.com/project/','Tasks',3,function(){
    console.log('Task has been deleted'); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);