【问题标题】:Need help on sharepoint 2013 Rest API with Ajax Call需要有关带有 Ajax 调用的 sharepoint 2013 Rest API 的帮助
【发布时间】:2015-10-09 10:21:44
【问题描述】:

在使用 Ajax 调用的 sharepoint 2013 Rest API 方面需要帮助。

我正在尝试将列表项从发布站点读取到团队站点。这两个网站都在不同的网站集中。

下面的代码在 Internet Explorer 中可以正常工作,而在 Google chrome 中则不行。

$(document).ready(function() {
    $.support.cors = true;
    $.ajax({
        url:"http://icon.heart.com/WorkTools/Organization/Claim/_api/web/lists/getByTitle('Claims Links')/items?$top=200",
        type:"GET",
        headers:{"accept":"application/json;odata=verbose"},
        dataType: "json",
        success: function(data){ alert("pass")}
        error: function(Data){ alert ("Fail");}
    });  
});

响应的 Http 状态代码为 401$.ajax 请求的错误是

加载资源失败:服务器响应状态为401(未授权)

错误 2:

XML HttpRequest 无法加载请求的资源上不存在“Access-control-Allow-Origin”标头。因此不允许访问 Oringin 'url'。

我无权访问服务器。我只需要在 SharePoint 2013 页面上尝试使用脚本编辑器。

【问题讨论】:

  • Chrome/Firefox返回什么错误,你用的是什么版本的IE?
  • @Daniel -- 错误 1:无法加载资源:服务器响应状态为 401(未授权)错误 2:XML HTtpRequest 无法加载没有“Access-control-Allow-Origin”标头出现在请求的资源上。 Oringin 'url' 因此不允许访问。 respinse 有 Http 状态代码 401 不幸的是我无权访问服务器。我必须用 OOB Controls 解决这个问题。我在 Sharepoint 2013 中使用脚本编辑器来运行它!有什么想法吗?

标签: sharepoint sharepoint-2010 sharepoint-2013


【解决方案1】:

这很可能是因为 Chrome 拒绝为 CORS 请求设置 Origin 标头。它甚至不允许您显式覆盖 Origin 标头。基本上这会导致服务器看到Origin: null,在大多数情况下会导致 403。 IE/Firefox 显然没有这样的限制。

作为 SharePoint On-Premises 的解决方法,您可以在 web.config 中设置 custom header

<customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>

或明确指定域:

<customHeaders>
    <add name="Access-Control-Allow-Origin" value="http://anotherintra.contoso.com" />
</customHeaders>

【讨论】:

  • 不幸的是,我无法访问服务器。我必须用 OOB Controls 解决这个问题。我在 Sharepoint 2013 中使用脚本编辑器来运行它!任何想法
【解决方案2】:

使用 OOB 脚本,它不会被修复。需要按照 Vadim Gremyachev 的规定在服务器端进行更改。它也可能在 IE8 中工作,但在 IE10 中它会显示一个安全弹出窗口,要求您访问来自其他域的数据。

【讨论】:

    【解决方案3】:
    headers: {
               "Accept": "application/json; odata=verbose",
               "X-RequestDigest": $("#__REQUESTDIGEST").val()
             },
    

    Work with __REQUESTDIGEST 中所述,某些请求需要添加请求摘要。即使这是一个 get 请求,并且 ms 页面上的解释是针对“非 GET”请求,它也解决了我的 api SP GET 调用的一些未经授权的问题。

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些有限的短期帮助。一个正确的解释would greatly improve 它的长期价值,通过展示为什么这是一个很好的解决问题的方法,并使它对未来有其他类似问题的读者更有用。请编辑您的答案以添加一些解释,包括您所做的假设
    【解决方案4】:

    IE 可以正常工作而 Chrome 不能正常工作的原因可能是各个浏览器如何处理您的凭据。要在 chrome 中提供您的凭据,请将以下代码添加到您的 $.ajax 调用中。

    xhrFields: {
     withCredentials: true
    },
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 2015-06-23
      • 2014-12-26
      相关资源
      最近更新 更多