使用Rest通过JQuery Json访问Sharepoint列表

8
我将尝试通过Jquery和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");
        }
    });        
};

我收到了错误信息:“Origin http://localhost:59936 is not allowed by Acess-Control-Allow-Origin." 我不确定原因是什么。这是因为Sharepoint需要身份验证(无名用户被阻止)还是这是跨域调用的问题?或者两者都有?我该怎么办?我在某个地方读到JSONP类型的解决方法,但这并没有奏效。谢谢。
4个回答

6
假设这两个资源都属于您公司内部,您总是从其中一个访问另一个,那么您的Sharepoint管理员可以尝试在Sharepoint IIS服务器上启用所谓的CORS(跨域资源共享)头文件。
这将允许您的跨源调用成功完成,因为浏览器和服务器交换头文件请求跨源共享。您可以在http://enable-cors.org/了解更多关于CORS的信息。
关于3nigma的答案。 Jquery的crossDomain标志不起作用,因为Sharepoint服务不是设计为JSONP服务,而这是Jquery在设置该标志时尝试使用的方式。(Sharepoint服务器必须填充数据,就像它是带有单个JSON对象的Javascript文件一样,但我不知道如何配置它来做到这一点。)

0

您需要调用自己的服务器,然后让您的服务器调用SharePoint服务器。假设您正在使用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数据的方法。

谢谢,

Matt


0

如果有其他人遇到这个问题,我在我的环境中通过将jquery、support.cors设置为true来解决了这个问题。代码如下:

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

});

这使我能够访问另一台物理服务器上的列表。 不需要更改 iis。 也不需要 JSONP。


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>

你的代码是做什么的?请简单解释一下。 - Sulthan Allaudeen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接