通过REST API通过Jquery AJAX创建SP 2013站点

问题描述:

我想通过JQuery AJAX通过REST API创建SP 2013站点。我已经从'/ _api/contextinfo'调用中提取了REQUEST_DIGEST。接下来,在尝试为'/ _api/web/webinfos/add'调用设置X-RequestDigest头时,浏览器发送带有方法'OPTIONS'的预发送请求,该浏览器正在获取HTTP 403响应代码。根据我的理解,它期待FedAuth cookie,而根据CORS原则,浏览器不会发送认证信息。看来“选项”动词需要在SP 2013上进行配置,我还没有找到任何明确的解决方案。我的理解是否正确,在这种情况下任何人都可以提供解决方案?通过REST API通过Jquery AJAX创建SP 2013站点

+0

您是否在讨论在现有网站集内创建网站集或子网站? –

+0

我正尝试使用网站模板在现有sitecollection内创建子网站。 – user7541515

我创建了这个代码,它适用于我的Sharepoint 2013环境。

首先,我尽我的Ajax请求,像这样相对URL:/_api/web/webinfos/add

的resquest导致403禁止

然后我用重试:_spPageContextInfo.webAbsoluteUrl + "/_api/web/webinfos/add"

,这一次它工作正常。

的原因是,我的网站集URL模式是:

所以,当我使用相对URL /_api /网络/ webinfos /加其与使用:

因为它不是当前网站集的地址Sharepoint返回一个跨站点脚本错误。

但是当我使用_spPageContextInfo.webAbsoluteUrl + “/ _api /网络/ webinfos /添加”它给我的网站集的完整URL:

这里完整的脚本:

<script language="JavaScript" type="text/javascript"> 
function createSubsiteUsingREST(data,siteTitle,siteUrl,siteDescription) { 

    $.ajax({ 
     url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/webinfos/add", 
     type: "POST", 
     headers: { 
      "accept": "application/json;odata=verbose", 
      "content-type": "application/json;odata=verbose", 
      "X-RequestDigest": $("#__REQUESTDIGEST").val() 
     }, 
     data: JSON.stringify({ 
      'parameters': { 
       '__metadata': { 
        'type': 'SP.WebInfoCreationInformation' 
       }, 
       'Url': siteUrl, 
       'Title': siteTitle, 
       'Description': siteDescription, 
       'Language': 1033, 
       'WebTemplate': 'sts', 
       'UseUniquePermissions': true 
      } 
     }), 
     success:function(){ 
      alert('SubSite Created with success!'); 
     }, 
     error:function(){ 
      alert('oups! An error occured during the process of creating this new SubSite!'); 
     }   
    }); 
} 

$(document).ready(function() { 
    $('#btnCreateSubSiteWithREST').on('click',function() { 
     var siteTitle = $('#txtSiteTitle').val(); 
     var siteUrl = $('#txtSiteUrl').val(); 
     var siteDescription = $('#txtSiteDescription').val(); 
     createSubsiteUsingREST(siteTitle,siteUrl,siteDescription); 
    }); 
}); 
</script> 

<input type="button" id="btnCreateSubSiteWithREST" value="Create New SubSite Using REST"> 

<div><label>Title of the SubSite : </label><input type="text" id="txtSiteTitle"></div> 
<div><label>URL of the SubSite : </label><input type="text" id="txtSiteUrl"></div> 
<div><label>Description of the SubSite : </label><input type="text" id="txtSiteDescription"></div> 

希望这个帮助!

+0

感谢您的示例代码。我使用的是absoluteUrl,我想我忘了提及该呼叫是从SharePoint服务器外部/不同域上的Web应用程序生成的,因此它是跨域调用。我们在呼叫中使用了crossDomain参数,但由于自定义报头(X-RequestDigest),正在生成一个正被拒绝的预取请求(403)。我们需要一种配置SP来接受OPTIONS请求并发回HTTP 200的方法。 – user7541515