【问题标题】:Dynamically fetch SharePoint List data using REST in an accordion在手风琴中使用 REST 动态获取 SharePoint 列表数据
【发布时间】:2021-03-14 11:01:26
【问题描述】:

我有一个基于类别的问答手风琴常见问题解答(codepen 链接如下)。

Accordion FAQ Codepen

在我的示例中,手风琴数据(左侧面板上的categories,右侧面板上的questionanswers)是静态的。

我正在尝试从具有 3 列的自定义 SharePoint 列表中获取我的 手风琴数据 - CategoryQuestionAnswer

我已尝试使用以下代码获取 SharePoint 列表数据,使用 REST API 获取示例 Employees 列表。 (下面的 Codepen 链接)。

SharePoint List Data using REST API 更新

谁能帮助我提供有关如何从自定义 SharePoint 列表中获取手风琴数据的代码。

**抱歉 - 我无法在此处嵌入 Codepen sn-p。

【问题讨论】:

  • 第二个代码在我的环境下运行良好,使用时有没有报错?
  • 没有错误。它运作良好。我只是想知道如何使用相同的代码或逻辑从自定义列表中提取手风琴数据。

标签: jquery sharepoint accordion sharepoint-online sharepoint-list


【解决方案1】:

您只需向要显示 SharePoint 列表中数据的 div 添加一个 id。 然后在切换卡片时调用该方法获取列表数据。

我的测试代码供你参考:

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title></title>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
  <!--<link rel='stylesheet prefetch' href='https://files.krve.io/f/eyespot.css'>-->
  <link rel='stylesheet prefetch'
    href='https://cdnjs.cloudflare.com/ajax/libs/MaterialDesign-Webfont/5.6.55/css/materialdesignicons.min.css'>
  <style type="text/css">
    body {
      margin-top: 30px;
      background-color: #eee;
    }

    .list-group.help-group {
      margin-bottom: 20px;
      padding-left: 0;
      margin: 0;
    }

    .list-group.help-group .faq-list {
      display: block;
      top: auto;
      margin: 0 0 32px;
      border-radius: 2px;
      border: 1px solid #ddd;
      box-shadow: 0 1px 5px rgba(85, 85, 85, 0.15);
    }

    .list-group.help-group .faq-list .list-group-item {
      position: relative;
      display: block;
      margin: 0;
      padding: 13px 16px;
      background-color: #fff;
      border: 0;
      border-bottom: 1px solid #ddd;
      border-top-left-radius: 2px;
      border-top-right-radius: 2px;
      color: #616161;
      transition: background-color .2s;
    }

    .list-group.help-group .faq-list .list-group-item i.mdi {
      margin-right: 5px;
      font-size: 18px;
      position: relative;
      top: 2px;
    }

    .list-group.help-group .faq-list .list-group-item:hover {
      background-color: #f6f6f6;
    }

    .list-group.help-group .faq-list .list-group-item.active {
      background-color: #f6f6f6;
      font-weight: 700;
      color: rgba(0, 0, 0, 0.87);
    }

    .list-group.help-group .faq-list .list-group-item:last-of-type {
      border-bottom-left-radius: 2px;
      border-bottom-right-radius: 2px;
      border-bottom: 0;
    }

    .tab-content.panels-faq {
      padding: 0;
      border: 0;
    }

    .panel.panel-help {
      box-shadow: 0 1px 5px rgba(85, 85, 85, 0.15);
      padding-bottom: 0;
      border-radius: 2px;
      overflow: hidden;
      background-color: #fff;
      margin: 0 0 16px;
    }

    .panel.panel-help a[href^="#"],
    .panel.panel-help a[href^="#"]:hover,
    .panel.panel-help a[href^="#"]:focus {
      outline: none;
      cursor: pointer;
      text-decoration: none;
    }

    .panel.panel-help .panel-heading {
      background-color: #f6f6f6;
      padding: 0 16px;
      line-height: 48px;
      border-top-right-radius: 2px;
      border-top-left-radius: 2px;
      color: rgba(0, 0, 0, 0.87);
    }

    .panel.panel-help .panel-heading h2 {
      margin: 0;
      padding: 14px 0 14px;
      font-size: 18px;
      font-weight: 400;
      line-height: 20px;
      letter-spacing: 0;
      text-transform: none;
    }

    .panel.panel-help .panel-body {
      background-color: #fff;
      border-top: 1px solid #ddd;
      border-radius: 2px;
      border-top-right-radius: 0;
      border-top-left-radius: 0;
      margin-top: 0;
    }

    .panel.panel-help .panel-body p {
      margin: 0 0 16px;
    }

    .panel.panel-help .panel-body p:last-of-type {
      margin: 0;
    }
  </style>
</head>

<body>
  <div class="container">
    <div class="col-md-4">
      <ul class="list-group help-group">
        <div class="faq-list list-group nav nav-tabs">
          <a href="#tab1" class="list-group-item active" role="tab" data-toggle="tab"> General Help (Power
            Apps/Automate)</a>
          <a href="#tab2" class="list-group-item" role="tab" data-toggle="tab"><i class="mdi mdi-account"></i>
            Environment</a>
          <a href="#tab3" class="list-group-item" role="tab" data-toggle="tab"><i class="mdi mdi-account-settings"></i>
            Mobile</a>
          <a href="#tab4" class="list-group-item" role="tab" data-toggle="tab"><i class="mdi mdi-star"></i>
            Maintainability</a>
          <a href="#tab5" class="list-group-item" role="tab" data-toggle="tab"><i class="mdi mdi-cart"></i> Errors</a>
          <!--<a href="#tab6" class="list-group-item" role="tab" data-toggle="tab"><i class="mdi mdi-heart"></i> Lorem ipsum</a>
                     <a href="#tab7" class="list-group-item" role="tab" data-toggle="tab"><i class="mdi mdi-check"></i> Dolor sit amet</a>-->
        </div>
      </ul>
    </div>
    <div class="col-md-8">
      <div class="tab-content panels-faq">
        <div class="tab-pane active" id="tab1">
          <div class="panel-group" id="help-accordion-1">
            <div class="panel panel-default panel-help">
              <a href="#opret-produkt" data-toggle="collapse" data-parent="#help-accordion-1">
                <div class="panel-heading">
                  <h2>How do I edit my profile?</h2>
                </div>
              </a>
              <div id="opret-produkt" class="collapse in">
                <div class="panel-body">
                  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloribus nesciunt ut officiis
                    accusantium quisquam minima praesentium, beatae fugit illo nobis fugiat adipisci quia distinctio
                    repellat culpa saepe, optio aperiam est!</p>
                  <p><strong>Example: </strong>Facere, id excepturi iusto aliquid beatae delectus nemo enim, ad saepe
                    nam et.</p>
                </div>
              </div>
            </div>
            <div class="panel panel-default panel-help">
              <a href="#rediger-produkt" data-toggle="collapse" data-parent="#help-accordion-1">
                <div class="panel-heading">
                  <h2>How do I upload a new profile picture?</h2>
                </div>
              </a>
              <div id="rediger-produkt" class="collapse">
                <div class="panel-body">
                  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloribus nesciunt ut officiis
                    accusantium quisquam minima praesentium, beatae fugit illo nobis fugiat adipisci quia distinctio
                    repellat culpa saepe, optio aperiam est!</p>
                  <p><strong>Example: </strong>Facere, id excepturi iusto aliquid beatae delectus nemo enim, ad saepe
                    nam et.</p>
                </div>
              </div>
            </div>
            <div class="panel panel-default panel-help">
              <a href="#ret-pris" data-toggle="collapse" data-parent="#help-accordion-1">
                <div class="panel-heading">
                  <h2>Can I change my phone number?</h2>
                </div>
              </a>
              <div id="ret-pris" class="collapse">
                <div class="panel-body">
                  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloribus nesciunt ut officiis
                    accusantium quisquam minima praesentium, beatae fugit illo nobis fugiat adipisci quia distinctio
                    repellat culpa saepe, optio aperiam est!</p>
                  <p><strong>Example: </strong>Facere, id excepturi iusto aliquid beatae delectus nemo enim, ad saepe
                    nam et.</p>
                </div>
              </div>
            </div>
            <div class="panel panel-default panel-help">
              <a href="#slet-produkt" data-toggle="collapse" data-parent="#help-accordion-1">
                <div class="panel-heading">
                  <h2>Where do I change my privacy settings?</h2>
                </div>
              </a>
              <div id="slet-produkt" class="collapse">
                <div class="panel-body">
                  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloribus nesciunt ut officiis
                    accusantium quisquam minima praesentium, beatae fugit illo nobis fugiat adipisci quia distinctio
                    repellat culpa saepe, optio aperiam est!</p>
                  <p><strong>Example: </strong>Facere, id excepturi iusto aliquid beatae delectus nemo enim, ad saepe
                    nam et.</p>
                </div>
              </div>
            </div>
            <div class="panel panel-default panel-help">
              <a href="#opret-kampagne" data-toggle="collapse" data-parent="#help-accordion-1">
                <div class="panel-heading">
                  <h2>What is this?</h2>
                </div>
              </a>
              <div id="opret-kampagne" class="collapse">
                <div class="panel-body">
                  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloribus nesciunt ut officiis
                    accusantium quisquam minima praesentium, beatae fugit illo nobis fugiat adipisci quia distinctio
                    repellat culpa saepe, optio aperiam est!</p>
                  <p><strong>Example: </strong>Facere, id excepturi iusto aliquid beatae delectus nemo enim, ad saepe
                    nam et.</p>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="tab-pane" id="tab2">
          <div class="panel-group" id="help-accordion-2">
            <div class="panel panel-default panel-help">
              <a href="#help-three" data-toggle="collapse" data-parent="#help-accordion-2">
                <div class="panel-heading">
                  <h2>data from list</h2>
                </div>
              </a>
              <div id="help-three" class="collapse in">
                <div class="panel-body" id="divResults">
                  
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="tab-pane" id="tab3">
          <div class="panel-group" id="help-accordion-2">
            <div class="panel panel-default panel-help">
              <a href="#help-three" data-toggle="collapse" data-parent="#help-accordion-2">
                <div class="panel-heading">
                  <h2>wuhu</h2>
                </div>
              </a>
              <div id="help-three" class="collapse in">
                <div class="panel-body">
                  <p>test</p>
                  <p><strong>Example: </strong>Facere, id excepturi iusto aliquid beatae delectus nemo enim, ad saepe
                    nam et.</p>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="tab-pane" id="tab4">
          <div class="panel-group" id="help-accordion-2">
            <div class="panel panel-default panel-help">
              <a href="#help-three" data-toggle="collapse" data-parent="#help-accordion-2">
                <div class="panel-heading">
                  <h2>wuhu</h2>
                </div>
              </a>
              <div id="help-three" class="collapse in">
                <div class="panel-body" >
                  come on,baby
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  <script src='https://code.jquery.com/jquery-2.2.4.min.js'></script>
  <script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js'></script>
  <script>
    // JavaScript Code
    $(function () {
      // Since there's no list-group/tab integration in Bootstrap
      $('.list-group-item').on('click', function (e) {
        var previous = $(this).closest(".list-group").children(".active");
        previous.removeClass('active'); // previous list-item
        getListData();
        $(e.target).addClass('active'); // activated list-item
      });
    });
    function getListData() {
      console.log('22222');
      var fullUrl = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getByTitle('Cities')/items";
      console.log(fullUrl);
      $.ajax({
        url: fullUrl,
        type: "GET",
        headers: {
          "accept": "application/json;odata=verbose",
          "content-type": "application/json;odata=verbose",
        },
        success: onQuerySucceeded,
        error: onQueryFailed
      });
    }

    function onQuerySucceeded(data) {
      var listItemInfo = " ";
      $.each(data.d.results, function (key, value) {
        listItemInfo += '<b>Title:</b> ' + value.Title + ' – <b>Industry:</b> ' + value.test + '<br />';
        console.log(listItemInfo);
      });
      $("#divResults").html(listItemInfo);
    }
    function onQueryFailed() {
      alert('Error!');
    }
  </script>
</body>

</html>

测试结果: 来源清单: 更新:

function onQuerySucceeded(data) {
      var listItemInfo = " ";
      $.each(data.d.results, function (key, value) {
        listItemInfo += '<b>Title:</b> ' + value.Title + ' – <b>Industry:</b> ' + value.test + '<br />';
        console.log(listItemInfo);
      });
      $("#divResults").html(listItemInfo);
      console.log($(".content").length)
      $(".content").html(listItemInfo);
    }

【讨论】:

  • 已根据您的代码更新了 Sharepoint 列表 codepen。但是现在,所有的问题都出现在一个 div 中 :(
  • 这里,所有值纽约、北京和其他值都在一个面板标题 div 中。我的要求是 - 每个 div 都是一个问答组。即)在您的代码中,“列表中的数据”是一个问题(应从列表中的“问题”列中获取),其答案为“纽约”(应从“答案”列中获取)。最后,所有类别 - 应从“类别”列中获取。就像“一般帮助”类别中的问答一样。
  • 我在代码中使用了id选择器,所以只能显示在一个地方,可以使用其他选择器,在代码中添加对应的元素,在方法的成功回调函数中根据你需要在元素中插入值获取列表数据。
  • 好的,你能告诉我如何为每个问题和答案循环div,以便获得多个div,如“一般帮助”类别。
  • 我在div中添加一个新的class,在div中添加相同的内容。可以根据内容选择不同的div添加不同的内容,也可以不同的div添加不同的id ,然后根据内容选择添加不同的div,不需要遍历div元素。
【解决方案2】:

您可以在浏览器中查看自定义列表的所有字段:

{you sp-web|site url}/_api/web/lists/getByTitle('Employees')

当你调用这个时,你会得到很多关于名为Employees的列表的信息。

在网址末尾添加

/_api/web/lists/getByTitle('Employees')/fields

还会显示带有字段元数据的 xml。因此,您可以在 StaticName 中搜索您感兴趣的字段 - 这是内部字段名称,不再更改。

当您获得所有字段名称时,您的查询将如下所示:

_api/web/lists('667b811c-8764-442f-a33b-c3e7c6b51a04')/items?select=Id,Title,Field1,Field2

通过 Guid 调用列表 - 更稳定,因为列表名称可以更改并且查询会中断。 如果某些字段是复杂数据(不是字符串、数字等),则必须写在查询中

$expand=字段/子字段(数据)

REST 返回前 100 个元素 - 这是性能限制。 因此,您必须通过分页请求您的数据:

$skiptoken=Paged=TRUE&p_ID={最后请求的 ID}&$top=100

更多信息见MSDN about REST

如果您在 SharePoint Online 中工作,我建议您使用 pnpjs

【讨论】:

    猜你喜欢
    • 2023-01-03
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 2019-10-17
    • 2021-11-16
    • 1970-01-01
    • 2013-01-20
    相关资源
    最近更新 更多