通过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站点
我创建了这个代码,它适用于我的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>
希望这个帮助!
感谢您的示例代码。我使用的是absoluteUrl,我想我忘了提及该呼叫是从SharePoint服务器外部/不同域上的Web应用程序生成的,因此它是跨域调用。我们在呼叫中使用了crossDomain参数,但由于自定义报头(X-RequestDigest),正在生成一个正被拒绝的预取请求(403)。我们需要一种配置SP来接受OPTIONS请求并发回HTTP 200的方法。 – user7541515
您是否在讨论在现有网站集内创建网站集或子网站? –
我正尝试使用网站模板在现有sitecollection内创建子网站。 – user7541515