【问题标题】:JQuery Json Access of a Sharepoint List via Rest通过 Rest 访问 Sharepoint 列表的 JQuery Json
【发布时间】:2011-07-28 08:18:17
【问题描述】:

我尝试通过 Jquery 和 REST 接口访问共享点列表。具有以下代码的站点正在运行 localhost。

此代码不起作用:

$(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");
        }
    });        
};

我收到错误消息 “Acess-Control-Allow-Origin 不允许Origin http://localhost:59936。”

我不确定是什么原因。是 Sharepoint 需要身份验证(匿名被阻止)还是跨域调用?或者两者兼而有之?

我能做什么?我在某处读到 JSONP 作为数据类型。但这没有用。 谢谢。

【问题讨论】:

    标签: javascript sharepoint rest jquery


    【解决方案1】:

    假设这两种资源都是您公司的内部资源,并且您总是从另一个访问其中一个,您的 Sharepoint 管理员可以尝试在 Sharepoint IIS 服务器上打开所谓的 CORS(跨源资源共享)标头。

    这将使您的跨域调用成功完成,因为浏览器和服务器会交换请求跨域共享的标头。您可以通过http://enable-cors.org/了解更多关于 CORS 的信息

    关于 3nigma 的回答。 Jquery 的 crossDomain 标志不起作用,因为 Sharepoint 服务未设计为 JSONP 服务,这是 Jquery 在设置该标志时尝试使用的。 (Sharepoint 服务器必须填充数据,就像它是一个带有单个 JSON 对象的 Javascript 文件一样,但我不知道如何配置它来做到这一点。)

    【讨论】:

      【解决方案2】:

      您需要改为调用您自己的服务器,然后让您的服务器调用 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数据的。

      谢谢,

      马特

      【讨论】:

        【解决方案3】:

        以防万一其他人遇到此问题,我通过将 jquery、suoport.cors 设置为 true 来使其在我的环境中工作。代码是:

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

        这允许我访问另一个物理服务器上的列表。不需要更改 iis。不需要 JSONP。

        【讨论】:

          【解决方案4】:
          <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>
          

          【讨论】:

          • 你的代码是做什么的,请解释一下你的代码。
          猜你喜欢
          • 2019-10-23
          • 1970-01-01
          • 2017-02-28
          • 2021-11-10
          • 2011-05-11
          • 2014-10-26
          • 1970-01-01
          • 2011-12-16
          • 1970-01-01
          相关资源
          最近更新 更多