2011-07-28 11 views
8

JqueryとRESTインターフェイス経由で共有リストにアクセスしようとしています。以下のコードのサイトはlocalhostを実行しています。JQuery Json Rest経由のSharepointリストへのアクセス

このコードは動作しません:

$(document).ready(function() { getdata(); }); 

function getdata() { 

    alert("start"); 

    $.ajax({ 
     url: "http://spkerberostest.vz.ch/_vti_bin/ListData.svc/Tasks", 
     dataType: 'JSON', 
     success:function(json) { alert ("Success"); 
     }, 
     error:function(){ 
      alert("Error"); 
     } 
    });   
}; 

私はエラーメッセージが表示されます "起源http://localhost:59936がアセス-CONTROL-許可-起源によって許可されていません。"

理由がわかりません。 Sharepointに認証が必要(匿名がブロックされている)か、クロスドメインコールですか?それとも両方?

どうすればよいですか?私は、Data TypeとしてJSONPについて読んでいます。しかし、これはうまくいかなかった。おかげさまで

答えて

0

代わりに独自のサーバーを呼び出し、サーバーでSharePoint Serverを呼び出す必要があります。あなたがC#の中間層を使用していると仮定すると、それはこのようなものになります。もちろん

public string getJson() 
    { 
     WebClient wc = new WebClient(); 
     wc.Credentials = new System.Net.NetworkCredential("[user]", "[password]", "[domain]"); 
     var url = "[some url in the 12 hive that can return json]"; 

     var result = wc.DownloadString(url); 

     return result; 
    } 

をあなたが戻ってあなたのクライアントにJSONを出力するためのコードを追加する必要がありますが、上記のコードは、あなたが得ることができる方法であります必要なSPデータ

おかげで、

マット

6

は、これらのリソースの両方があなたの会社の内部にある、とあなたは常に一方から他方へのアクセス、お使いのSharePoint管理者は、CORS(クロスと呼ばれるものをオンにしようとすることができますと仮定すると、元のリソース共有)ヘッダーを共有ポイントIISサーバー上に作成します。

これにより、ブラウザとサーバーがクロスオリジン共有を要求するヘッダーを交換するため、クロスオリジン呼び出しが正常に完了できるようになります。 CORSの詳細については、http://enable-cors.org/

については3nigmaの回答を参照してください。 SharepointサービスはJSONPというサービスとして設計されていないため、JqueryのcrossDomainフラグは機能しません。これはJqueryがそのフラグを設定したときに使用するサービスです。 (Sharepointサーバーは、その中に単一のJSONオブジェクトを持つJavascriptファイルのようにデータをパディングする必要がありますが、それを行うための設定方法はわかりません)。

0

この問題を嫌っているので、jquery、suoport.corsをtrueに設定して、私の環境でこれを動作させました。コードは

$.support.cors = true; 
$.ajax({ 
crosDomain:true,  
    url: listUrl, 
    success: getItemsSuccess, 
    error: jqueryError, 
    dataType:'json' 

}); 

です。これにより、別の物理サーバーのリストにアクセスすることができます。 iisの変更は必要ありませんでした。 JSONPは必要ありません。

+0

CORSがネットワーク上で有効になっている場合にのみ動作します – Andrey

0
<script type="text/javascript"> 
$(document).ready(function() { getdata(); }); 

function getdata() { 

    alert("start"); 

    $.ajax({ 
     url: "http://yourserver/_api/Web/Lists/getByTitle('yourlist 
')/items/", 
     type: "GET", 
     headers: { 
      "accept": "application/json;odata=verbose", 
     }, 
     success:function(json) { alert ("Success"); 
     }, 
     error:function(){ 
      alert("Error"); 
     } 
    });   
}; 
</script> 
+0

あなたのコードは何ですか、あなたのコードについて少し説明してください。 –

関連する問題