javascript - SharePoint 2013 列表项更新,列表名称中有空格

标签 javascript ajax sharepoint-2013 splistitem

我正在尝试为其中的单个项目更新名为“主管的任务列表 (DTL)”的 SharePoint 列表。我有以下代码:

var listName = 'Director''s Task List (DTL)';

var requestURI = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items(" + ID + ")";

$.ajax({
    uri: requestURI,
    type: "POST",
    contentType: "application/json; odata=verbose",
    data: JSON.stringify(data),
    headers: {
        "Accept": "application/json; odata=verbose",
        "X-HTTP-Method": "MERGE",
        "IF-MATCH": "*",
        "X-RequestDigest": $("#__REQUESTDIGEST").val()
    }
});

数据在哪里:

var data = {
    '__metadata': { 'type': getItemTypeForListName(listName)},
    'Suspense_x0020_Status' : 
        {
            '__metadata': { 'type': 'SP.FieldUrlValue' },
            'Description': statusObject[ID]["color"],
            'Url': statusObject[ID]["html"]
        }
};

getItemTypeForListName(listName) 是:

function getItemTypeForListName(listName) {
    var itemType = "SP.Data." + listName.charAt(0).toUpperCase() + listName.slice(1) + "ListName";
    var encItemType = itemType.replace(/\s/g,'_x0020_');
    return(encItemType);
}

我无法让代码正确完成。我得到一个错误:

模型无法解析名为“SP.Data.Director”的类型“s_x0020_Task_x0020_List_x0020_(DTL)ListName”。当模型可用时,每种类型都必须解析为有效类型。

我知道它与空格和单引号有关,但我尝试了几种解决方案,但没有成功。我已经看到双单引号 "''"是一种工作方法,在让此列表名称类型工作之前对我有所帮助。所以不要立即指出这一点。

有什么想法吗?

最佳答案

好像getItemTypeForListName函数返回错误的列表项实体类型名称。

以下端点返回实际的列表项实体类型名称:/_api/web/lists/GetByTitle('<list title>')?$select=ListItemEntityTypeFullName

对于列表标题:Director's Task List (DTL) :

  • getItemTypeForListName 函数返回 SP.Data.Director''s_x0020_Task_x0020_List_x0020_(DTL)ListName
  • 当指定端点返回时: SP.Data.Directors_x0020_Task_x0020_List_x0020_DTLListItem

示例

示例显示如何返回列表项类型名称:

var listTitle = "Director''s Task List (DTL)"

function getItemTypeForListName(listTitle)
{
  return executeJson({
    url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/?$select=ListItemEntityTypeFullName",
    method: 'GET'
  }).then(function(data){
       return data.d.ListItemEntityTypeFullName;
  });  
}

getItemTypeForListName(listTitle)
.done(function(name){
   console.log(name);
})
.fail(function(error){
  console.log(JSON.stringify(error));
});

在哪里

function executeJson(options) 
{
    var headers = options.headers || {};
    headers["Accept"] = "application/json;odata=verbose";
    if(options.method == "POST") {
        headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
    }   

    var ajaxOptions = 
    {       
       url: options.url,   
       type: options.method,  
       contentType: "application/json;odata=verbose",
       headers: headers
    };
    if(options.method == "POST") {
      ajaxOptions.data = JSON.stringify(options.payload);
    }  

    return $.ajax(ajaxOptions);
}

关于javascript - SharePoint 2013 列表项更新,列表名称中有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33767526/

相关文章:

xml - 自定义字段定义

SharePoint 错误 : The server does not allow messages larger than 2097152 bytes

javascript - push.on ('registration' ) 不适用于 android

javascript - Node.js 中所有内置事件的列表?

javascript - Linux 上的 Node.js UDP 子网广播失败

javascript - Chrome 扩展 - 为什么一些与过滤器不匹配的网址仍然通过?

mysql - 从使用 MySQL _FETCH 设置的字符串中删除双引号的最佳方法是什么?

ruby-on-rails - 在 Rails 中使用 jquery 和 Ajax 检查用户名可用性

javascript - AJAX 将 NULL 值插入 MYSQL

javascript - 使用 REST API 在主机 Web 列表中插入记录的 SharePoint 应用程序