Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在完全信任解决方案中通过javascript调用Sharepoint 2013 API?_Javascript_C#_Jquery_Sharepoint 2013_Sharepoint Jsom - Fatal编程技术网

如何在完全信任解决方案中通过javascript调用Sharepoint 2013 API?

如何在完全信任解决方案中通过javascript调用Sharepoint 2013 API?,javascript,c#,jquery,sharepoint-2013,sharepoint-jsom,Javascript,C#,Jquery,Sharepoint 2013,Sharepoint Jsom,我正在开发一个带有一些自定义Web部件的农场解决方案(完全信任)。对于一个Web部件,我需要一些ajax行为,所以我想:为什么不使用JSOMAPI呢? 我的web部件只是想检索新的公告,所以我添加了一个新的web部件(农场解决方案)、一些HTML和以下javascript <script src="//ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js" type="text/javascript"></script> <

我正在开发一个带有一些自定义Web部件的农场解决方案(完全信任)。对于一个Web部件,我需要一些ajax行为,所以我想:为什么不使用JSOMAPI呢? 我的web部件只是想检索新的公告,所以我添加了一个新的web部件(农场解决方案)、一些HTML和以下javascript

<script src="//ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js" type="text/javascript"></script>

<script type="text/javascript">

function retrieveListItems() {
  SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function () {
    var ctx = SP.ClientContext.get_current();
    var web = ctx.get_web();
    var list = web.get_lists().getByTitle("Announcements");
    ctx.load(list);
    ctx.executeQueryAsync(
          function () {
              console.log(list.get_title());
          },
          function (sender, args) {
              console.log(args.get_message());
          }
        );
  });
}
在Google Chrome控制台的网络选项卡中,在预览(响应)中,我看到了以下内容

/_vti_bin/client.svc/ProcessQuery 403 (FORBIDDEN)
     executeRequest         @ MicrosoftAjax.js:5
     executeRequest         @ MicrosoftAjax.js:5
     invoke                 @ MicrosoftAjax.js:5
     $31_0                  @ sp.runtime.js:2
     executeClientRequestAsync  @ sp.runtime.js:2
     executeQueryAsync      @ sp.runtime.js:2
     retrieveListItems      @ default.aspx:1091
     onclick                @ default.aspx:1118
[{SchemaVersion: "15.0.0.0", LibraryVersion: "15.0.4420.1017", ErrorInfo: {,…},…}]
  0:{SchemaVersion: "15.0.0.0", LibraryVersion: "15.0.4420.1017", ErrorInfo: {,…},…}
  ErrorInfo:{,…}
  ErrorCode:-2130575251
  ErrorMessage:"A validação de segurança para esta página não é válida e pode estar corrompida. Use o botão Voltar do navegador da Web para tentar realizar a operação novamente."
  TRANSLATING: The security validation for this page is invalid and might be corrupted.  Please use your web browser's Back button to try your operation again.
  ErrorTypeName:"Microsoft.SharePoint.SPException"
  ErrorValue:null
  TraceCorrelationId:"78edb09d-fb1d-7012-0000-026d47d0154a"
  LibraryVersion:"15.0.4420.1017"
  SchemaVersion:"15.0.0.0"
  TraceCorrelationId:"78edb09d-fb1d-7012-0000-026d47d0154a"
我做了一些研究,发现了一些与FormDigest相关的东西,因此我在HTML标记中搜索了u REQUESTDIGEST并复制了它的值,调用了函数,并意识到发送的摘要是不同的。这可能是问题的根源

我做了更多的研究,发现这个js函数欺骗了RequestDigest:

 function CustomUpdateFormDigest() {
    if (window._spPageContextInfo != null) {
        var $v_2 = window._spPageContextInfo;
        var $v_3 = $v_2.webServerRelativeUrl;
        var $v_4 = window._spFormDigestRefreshInterval;
        UpdateFormDigest($v_3, $v_4);
    }
}
在调用我的retrieveListItems()函数之前调用了它,但它不起作用。谁能给我指出正确的方向?这真的是一个消化问题吗


编辑:我意识到,如果我的网页有我的web部件,当我点击链接时,如果我在google chrome控制台中执行脚本,我就会得到错误。如果我从页面中删除我的Web部件,我可以在Google Chrome控制台中成功执行脚本

如果要查询同一站点,则不应实例化新上下文,而应使用SP.ClientContext.get_current()。
如果您正在查询另一个web,则必须处理一些身份验证和/或使用执行代理,具体取决于您正在执行的操作。请记住,查询到其他站点通常是不好的做法。您应该改用搜索。
此外,您不应引用SharePoint js文件,而应使用按需脚本(SOD)结构等待SharePoint准备就绪,然后再调用您的库。

找到了解决方案

我以错误的方式引用了我的脚本 我是这样说的:

<script src="//ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js" type="text/javascript"></script>
<script type="text/javascript" src="/_layouts/15/sp.runtime.js"> </script>
<script type="text/javascript" src="/_layouts/15/sp.js"> </script>
<script type="text/javascript" src="/_layouts/SP.debug.js"></script>
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function () {
   // My code...
});

很好,将尝试回我的结果后,你能提供我一些样本或链接如何使用你提到的草皮?与上下文的东西,我提供给你?您是否有任何加载问题(http)?控制台中是否有任何错误?是的,您建议的上下文可以使用,但可以使用“站点内容”页面中的原始代码。是的,有一些404 for one images解决了404问题(concole中没有错误),但问题是persistok,因此可能是js加载顺序的问题。这里有一些关于SOD的好文档,当你谈论其他网站时,它是相同的还是不同的服务器/web应用程序/网站集?我意识到,如果我在“主页”的Google Chrome控制台中调用我的函数,我会得到禁止的错误,但我在“网站内容”页面中调用它,我想,这样做是为了获得上下文,而不是创建一个新的上下文?
<script src="//ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js" type="text/javascript"></script>
<script type="text/javascript" src="/Style Library/Js/TopNavigation.js"> </script>
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function () {
   // My code...
});