2011-07-28 64 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

您的代码的功能是什么?请稍微解释一下您的代码。 –