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

时间:2017-02-09 16:47:45

标签: sharepoint sharepoint-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上配置'OPTIONS'动词,我还没有找到任何明确的解决方案。我的理解是否正确,在哪种情况下,任何人都可以提供解决方案吗?

1 个答案:

答案 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>

希望这有帮助!