Как запросить AJAX импортированную таблицу (вместо локальной таблицы), используя javascript - PullRequest
0 голосов
/ 27 февраля 2020

В настоящее время у меня есть скрипт, который ищет столбец 1 локально сохраненной таблицы и возвращает результат из столбца 2 из той же строки. Основываясь на этом результате, он что-то записывает на консоль.

Вот оно, действие. Он ищет в таблице «дракон» в столбце 1, возвращает «2» из столбца 2, затем сценарий записывает «Результат - два». на консоль.

var username = 'dragon'
const searchDataSetByKey = (dataSet, key) => {
  return dataSet.find((data) => data[0] === key)
}
document.addEventListener('DOMContentLoaded', () => {
  var tableToArray = Array
  .from(document.querySelectorAll('tr'))
  .reduce((_tableToArray, tableRow, tableRowIndex) => {
    if(tableRowIndex !== 0) {
      var tableData = tableRow.querySelectorAll('td')
      var key = tableData.item(0).innerText
      var value = tableData.item(1).innerText
      _tableToArray.push([key, value])
    }
    return _tableToArray
  }, [])
  var searchString = searchDataSetByKey(tableToArray,username).toString()
var oneSearch = searchString.indexOf("1")
var twoSearch = searchString.indexOf("2")
var threeSearch = searchString.indexOf("3")
if (oneSearch >= 0) {
console.log('The result is one!');}
else if (twoSearch >= 0) {
  console.log('This result is two.');}
  else if (threeSearch >= 0) {
  console.log('The answer is three! :)');}
})
<html>
  <script src="script.js"></script>
  <body>
    <table>
      <tr>
        <th>Username</th>
        <th>1/2/3</th>
      </tr>
      <tr>
        <td>wisp</td>
        <td>1</td>
      </tr>
      <tr>
        <td>husky</td>
        <td>2</td>
      </tr>
      <tr>
        <td>dragon</td>
        <td>2</td>
      </tr>
      <tr>
        <td>woop</td>
        <td>3</td>
      </tr>
      <tr>
        <td>e6</td>
        <td>1</td>
      </tr>
    </table>
  </body>
</html>

Это отлично подходит для локально хранящихся таблиц. Проблема в том, что я хотел бы получить тот же результат из Google Sheet. Я нашел способ сохранить информацию из Google Sheet в таблицу HTML, используя AJAX. Код для этого можно увидеть здесь:

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
  var spData = null;
  function doData(json) {
      spData = json.feed.entry;
  }
  
  function drawCell(tr, val) {
      var td = $("<td/>");
      tr.append(td);
      td.append(val);
      return td;
  }
  function drawRow(table, rowData) {
	  if (rowData == null) return null;
	  if (rowData.length == 0) return null;
	  var tr = $("<tr/>");
	  table.append(tr);
	  for(var c=0; c<rowData.length; c++) {
		  drawCell(tr, rowData[c]);
	  }
	  return tr;
  }
  
  function drawTable(parent) {
	  var table = $("<table/>");
	  parent.append(table);
	  return table;
  }
  
  function readData(parent) {
      var data = spData;
      var table = drawTable(parent);
      var rowData = [];
      
      for(var r=0; r<data.length; r++) {
          var cell = data[r]["gs$cell"];
          var val = cell["$t"];
          if (cell.col == 1) {
              drawRow(table, rowData);
              rowData = [];
          }
          rowData.push(val);
      }
      drawRow(table, rowData);
  }
  $(document).ready(function(){
      readData($("#data"));
  });

  </script>
<script src="https://spreadsheets.google.com/feeds/cells/1P9DhWOHcl14Y7-P5wCxTm-sUceckGquPoOobO75XhvM/1/public/values?alt=json-in-script&callback=doData"></script>
<style type="text/css" media="print">
  form {display: none;}
</style>
</head>
<body>
<div id="data"/>
</body>
</html>

Мне было интересно, есть ли способ достичь того, что было сделано в локальной таблице HTML, с помощью этой таблицы AJAX import HTML?

Спасибо!

1 Ответ

1 голос
/ 27 февраля 2020

Это та же самая работа, которую вам нужно выполнить, хотя и в другое время - т.е. в ответ на другое событие. Делайте это сразу после загрузки таблицы, а не сразу после получения события DOMContentLoaded из документа. Вот альтернативный способ смотреть go.

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
  var spData = null;
  function doData(json) {
      spData = json.feed.entry;
  }
  
  function drawCell(tr, val) {
      var td = $("<td/>");
      tr.append(td);
      td.append(val);
      return td;
  }
  function drawRow(table, rowData) {
	  if (rowData == null) return null;
	  if (rowData.length == 0) return null;
	  var tr = $("<tr/>");
	  table.append(tr);
	  for(var c=0; c<rowData.length; c++) {
		  drawCell(tr, rowData[c]);
	  }
	  return tr;
  }
  
  function drawTable(parent) {
	  var table = $("<table/>");
	  parent.append(table);
	  return table;
  }
  
  function readData(parent) {
      var data = spData;
      var table = drawTable(parent);
      var rowData = [];
      
      for(var r=0; r<data.length; r++) {
          var cell = data[r]["gs$cell"];
          var val = cell["$t"];
          if (cell.col == 1) {
              drawRow(table, rowData);
              rowData = [];
          }
          rowData.push(val);
      }
      drawRow(table, rowData);
  }
  $(document).ready(function(){
      readData($("#data"));
      searchTable( 'dragon', document.querySelector('table') );
  });

  function searchTable(searchStr, target)
  {
        let rows = Array.from( target.querySelectorAll('tr') );
        rows.forEach( (row,idx,col) => {
                                let firstCell = row.querySelector('td').textContent;
                                if (firstCell == searchStr)
                                {
                                      let cell2 = row.querySelectorAll('td')[1].textContent;
                                      console.log(`${searchStr} found in row ${idx}`);
                                      console.log(`col 2 of row #${idx} is: ${cell2}`);
                                }
                          }
                    );
  }


  </script>
<script src="https://spreadsheets.google.com/feeds/cells/1P9DhWOHcl14Y7-P5wCxTm-sUceckGquPoOobO75XhvM/1/public/values?alt=json-in-script&callback=doData"></script>
<style type="text/css" media="print">
  form {display: none;}
</style>
</head>
<body>
<div id="data"/>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...