2011-07-28 94 views
8

我嘗試通過Jquery和REST Interface訪問SharePoint列表。下面的代碼的網站運行本地主機。JQuery Json通過其他方式訪問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不接取控制允許原產地允許的。」

我不確定是什麼原因。 Sharepoint需要身份驗證(匿名被阻止)還是跨域呼叫?甚至是兩者?

我該怎麼辦?我讀了關於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(跨起源資源共享)標題在Sharepoint IIS服務器上。

這將允許您的跨源來電成功完成,因爲瀏覽器和服務器交換標題請求跨源共享。你可以在http://enable-cors.org/

瞭解更多關於CORS的信息關於3nigma的回答。 Jquery的crossDomain標誌將不起作用,因爲Sharepoint服務並非設計爲JSONP服務,這是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

您的代碼的功能是什麼?請稍微解釋一下您的代碼。 –