experiment_id: web-retrieval-v1
fixture_id: /demos/web-component-grid-server-search
mode: provenance
representation: html
origin_response_id: 23628537f549f7e2d86bec4db0e2d5e6
version: 2026-10-21
version_created_at_utc: 2026-10-21T20:42:35.579Z
version_nonce: 71d7cbc932f8cd167777623e6519589b
generated_at_utc: 2026-11-05T17:45:14.394Z
response_nonce: 95679d7d94af8299d1d0882085badd06

Server Search

100 of 125
Enable server search through the searchKey attribute with <zg-param name="searchKey" value="search">.
Result Full HTML CSS JS
Edit Download
ZingGrid Star Wars Reload Demo

Full Code

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>ZingGrid Demo</title>
  <script nonce="undefined" src="https://cdn.zinggrid.com/zinggrid.min.js"></script>
  <style>
    :root {
      --bgColor: #041F35;
      --headerFontColor: #fff;
      --mainFontColor: var(--bgColor, darkblue);
      --rowColor: #777;

      --zg-caption-background: var(--bgColor, inherit);
      --zg-caption-color: var(--headerFontColor, white);
      --zing-grid-color: var(--mainFontColor);
    }


    .zg-body .button {
      text-align: center;
      background: #07C;
      color: #FFF;
      cursor: pointer;
      border-radius: 3px;
      font-size: 0.85rem;
      padding: 5px 20px;
      cursor: pointer;
      margin: 15px 0 15px 15px;
      position: relative;
      top: 0;
    }

    .zg-body .button:hover {
      background: #1b6ead;
    }

    zing-grid[loading] {
      min-height: 600px;
    }

    /* hide some inner grid elements */
    zing-grid[loading] zg-pager {
      visibility: hidden;
    }


    zg-load-mask {
      /* set the color to match the gif */
      opacity: .90;
      top: 65px;
      height: calc(100% - 65px);
      /* custom gif for loading */
      background-image: url('https://storage.googleapis.com/zg-demos.appspot.com/starwars_loading.gif');
      /* Center and scale the image nicely */
      background-position: center;
      background-repeat: repeat;
      background-size: contain;
    }

    zing-grid[loading] {
      height: 428px;
    }
  </style>
</head>

<body class="zg-body">
  <zing-grid pager page-size="5" search>
    <zg-caption>
      ZingGrid Star Wars
      <span class="button" id="reloadBtn">Reload Demo</span>
    </zg-caption>
    <zg-data>
      <!-- define the main source for the API -->
      <zg-param name="src" value="https://swapi.py4e.com/api/people/"></zg-param>

      <!-- define the path in the JSON to get the array of results. 
            In this case it is body.results -->
      <zg-param name="recordPath" value="results"></zg-param>

      <!-- if loadByPage is set to true it will go to the 
          server for each new page of data -->
      <zg-param name="loadByPage" value="true"></zg-param>

      <!-- define the "page" query parameter -->
      <zg-param name="pageKey" value="page"></zg-param>

      <!-- Need to tell ZG how many records were returned so it knows
            how to divide up the page-size -->
      <zg-param name="countPath" value="count"></zg-param>

      <!-- define the path in the result JSON to find next/prev urls -->
      <zg-param name="nextPath" value="next"></zg-param>
      <zg-param name="prevPath" value="previous"></zg-param>

      <!-- Need to tell ZG how mto search the API -->
      <zg-param name="searchKey" value="search"></zg-param>
    </zg-data>
    <zg-colgroup>
      <zg-column index="name"></zg-column>
      <zg-column index="height"></zg-column>
      <zg-column index="mass"></zg-column>
      <zg-column index="hair_color"></zg-column>
      <zg-column index="eye_color"></zg-column>
      <zg-column index="skin_color"></zg-column>
    </zg-colgroup>
  </zing-grid>
  <script>
    ZingGrid.setLicense(['26ccbfec16b8be9ee98c7d57bee6e498']); // window:load event for Javascript to run after HTML
    // because this Javascript is injected into the document head
    window.addEventListener('load', () => {
      // Javascript code to execute after DOM content
      const zgRef = document.querySelector('zing-grid');
      zgRef.executeOnLoad(() => {
        // Add event listener to button
        reloadBtn.addEventListener('click', () => {
          zgRef.refresh();
        });
      });
    });
  </script>
</body>

</html>
<!DOCTYPE html>
<html>
	<head>
    <meta charset="utf-8">
    <title>ZingGrid Demo</title>
		<script src="https://cdn.zinggrid.com/zinggrid.min.js"></script>
	</head>
	<body class="zg-body">
    <zing-grid 
      pager
      page-size="5"
      search>
      <zg-caption>
        ZingGrid Star Wars
        <span class="button" id="reloadBtn">Reload Demo</span>
      </zg-caption>
      <zg-data>
        <!-- define the main source for the API -->
        <zg-param name="src" value="https://swapi.py4e.com/api/people/"></zg-param>
        
        <!-- define the path in the JSON to get the array of results. 
            In this case it is body.results -->
        <zg-param name="recordPath" value="results"></zg-param>
        
        <!-- if loadByPage is set to true it will go to the 
          server for each new page of data -->
        <zg-param name="loadByPage" value="true"></zg-param>
        
        <!-- define the "page" query parameter -->
        <zg-param name="pageKey" value="page"></zg-param>

        <!-- Need to tell ZG how many records were returned so it knows
            how to divide up the page-size -->
        <zg-param name="countPath" value="count"></zg-param>
        
        <!-- define the path in the result JSON to find next/prev urls -->
        <zg-param name="nextPath" value="next"></zg-param>
        <zg-param name="prevPath" value="previous"></zg-param>
        
        <!-- Need to tell ZG how mto search the API -->
        <zg-param name="searchKey" value="search"></zg-param>
      </zg-data>
      <zg-colgroup>
        <zg-column index="name"></zg-column>
        <zg-column index="height"></zg-column>
        <zg-column index="mass"></zg-column>
        <zg-column index="hair_color"></zg-column>
        <zg-column index="eye_color"></zg-column>
        <zg-column index="skin_color"></zg-column>
      </zg-colgroup>
    </zing-grid>
	</body>
</html>
:root {
  --bgColor: #041F35;
  --headerFontColor: #fff;
  --mainFontColor: var(--bgColor, darkblue);
  --rowColor: #777;
  
  --zg-caption-background: var(--bgColor, inherit);
  --zg-caption-color: var(--headerFontColor, white);
  --zing-grid-color: var(--mainFontColor);
}


.zg-body .button {
  text-align: center;
  background: #07C;
  color: #FFF;
  cursor: pointer;
  border-radius: 3px;
  font-size: 0.85rem;
  padding: 5px 20px;
  cursor: pointer;
  margin: 15px 0 15px 15px;
  position: relative;
  top: 0;
}
 
.zg-body .button:hover {
	background: #1b6ead;
}
zing-grid[loading]{
  min-height: 600px;
}

/* hide some inner grid elements */
zing-grid[loading]  zg-pager {
  visibility: hidden;
}


zg-load-mask {
  /* set the color to match the gif */
  opacity: .90;
  top: 65px;
  height: calc(100% - 65px);
  /* custom gif for loading */
  background-image: url('https://storage.googleapis.com/zg-demos.appspot.com/starwars_loading.gif');
  /* Center and scale the image nicely */
  background-position: center;
  background-repeat: repeat;
  background-size: contain;
}
// window:load event for Javascript to run after HTML
// because this Javascript is injected into the document head
window.addEventListener('load', () => {
  // Javascript code to execute after DOM content
  const zgRef = document.querySelector('zing-grid');
  zgRef.executeOnLoad(() => {
  	// Add event listener to button
    reloadBtn.addEventListener('click', () => {
      zgRef.refresh();
    });
  });
});

Interested in this demo? Modify it to your needs in ZingSoft Studio, our testing sandbox. It's free to sign up, and you can come back and edit at any time!

Edit in Studio

Demo Gallery