2017-02-09 19 views
0

Jquery AJAX経由でREST APIを使用してSP 2013サイトを作成しようとしています。私は '/ _api/contextinfo'呼び出しからREQUEST_DIGESTを抽出しました。次に、 '/ _api/web/webinfos/add'コールのX-RequestDigestヘッダーを設定しようとしているときに、HTTP 403応答コードを取得しているブラウザーがメソッド 'OPTIONS'を使用した飛行前要求を送信します。私の理解によると、ブラウザは、CORSの原則によると、認証情報を送信していないが、FedAuthのクッキーを期待している。 SP 2013で 'OPTIONS'動詞を設定する必要があり、このための明確な解決策が見つかっていないようです。私の理解は正しいですか?その場合、誰も解決策を提供できますか?Jquery AJAX経由でREST APIを使用してSP 2013サイトを作成

+0

既存のサイトコレクション内にサイトコレクションまたはサブサイトを作成することについて話していますか? –

+0

サイトテンプレートを使用して既存のサイトコレクション内にサブサイトを作成しようとしています。 – user7541515

答えて

0

私のSharepoint 2013環境で動作するこのコードを作成しました。 /_api/web/webinfos/add

を禁止403でresquest結果:

まず、私はこのような相対URLで私のAJAX要求をしてみてください。

それから私はして再試行:_spPageContextInfo.webAbsoluteUrl + "/_api/web/webinfos/add"

と、この時間は、それが正常に動作します。だから、

私は、相対URLを使用する場合/_API /ウェブ/ webinfosは/使用など、その同じを追加します。

の理由は、私のサイトコレクションのURLパターンがあるということです:

現在のサイトコレクションSharepointのアドレスではなく、クロスサイトスクリプティングエラーが返されるためです。

しかし、私は_spPageContextInfo.webAbsoluteUrl +それは私に、サイトコレクションの完全なURLを与える "/ _API /ウェブ/ webinfos /追加" を使用します。

ここにあります完全なスクリプト:

<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を使用していると私はコールがクロスドメインの呼び出しである結果として別のドメイン上のWebアプリケーションからSharepointサーバーの外部から生成されていることを言及することを忘れたと思う。コールでcrossDomainパラメータを使用しましたが、カスタムヘッダー(X-RequestDigest)によって、拒否されているプリフェッチ要求が生成されています(403)。 OPTIONS要求を受け入れてHTTP 200を返すようにSPを設定する方法が必要です。 – user7541515

関連する問題