我正在尝试通过Jquery AJAX通过REST API创建SP 2013网站。我从'/ _api / contextinfo'调用中提取了REQUEST_DIGEST。接下来,在尝试为'/ _api / web / webinfos / add'调用设置X-RequestDigest标头时,浏览器会发送一个带有方法'OPTIONS'的飞行前请求,该请求获得HTTP 403响应代码。根据我的理解,它期待FedAuth cookie,而浏览器根据CORS原则不发送身份验证信息。似乎需要在SP 2013上配置'OPTIONS'动词,我还没有找到任何明确的解决方案。我的理解是否正确,在哪种情况下,任何人都可以提供解决方案吗?
答案 0 :(得分:0)
我创建了适用于我的Sharepoint 2013环境的代码。
首先,我尝试使用相对URL的ajax请求:/_api/web/webinfos/add
resfor结果为 403 Forbidden 。
然后我重试:_spPageContextInfo.webAbsoluteUrl + "/_api/web/webinfos/add"
这次它运作正常。
原因是我的网站集网址格式为:
因此,当我使用相对网址 / _ api / web / webinfos / add 时,它与使用相同:
因为它不是当前网站集Sharepoint的地址返回跨站点脚本错误。
但是当我使用 _spPageContextInfo.webAbsoluteUrl +" / _ api / web / webinfos / add" 时,它会为我提供网站集的完整网址:
这是完整的脚本:
<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>
希望这有帮助!