При выборе в раскрывающемся списке данные считаются пустыми, кроме первого выбора элемента в веб-приложении Google. - PullRequest
1 голос
/ 09 апреля 2020

Я работаю над веб-приложением Google. Я хочу получить данные на основе выпадающего списка. Я могу получить данные отлично только при первом выборе элемента из выпадающего списка, а в остальном я получаю пустой массив. Я проверил код на стороне сервера, вручную позвонив и он работает нормально, и отправил данные обратно безупречно. Проблема в коде на стороне клиента, но я понятия не имею об этом поведении. Буду признателен, если кто-нибудь поможет. Заранее спасибо.

Вот ссылка на лист https://docs.google.com/spreadsheets/d/1yrQjp0_lU3iONW0FK3yCwm79CzD9KUW3Yg92Al5yoAo/edit?usp=sharing

Ссылка на веб-приложение https://script.google.com/macros/s/AKfycbyJdifqDE4NG3dhIsQDQT3f9xKYYfPBL4QXz3p6SZzz3_avdf3b/exec?v=updateevent

Вот раскрывающийся список

Выбор первого элемента индекса и полученного массива в предупреждающем сообщении

Выбор второго элемента и полученного нулевого массива

Когда я передаю текст вручную к функции сервера ниже для второго и третьего элемента я получаю соответствующие строки и получаю ответ в массиве, но используя клиентскую часть, я получаю нулевой массив в ответ.

Вот мой код на стороне сервера

function GetSelection(title){
    var ss = SpreadsheetApp.openById("Sheet_ID");
    var sheet = ss.getSheetByName("Event_Info"); 
    var Avals = sheet.getRange("A1:A").getValues();
    var Alast = Avals.filter(String).length;   
    var list  = sheet.getRange("A2:T" + Number(Alast)).getValues();
    Logger.log(list); 
    var values = []; 
    values.pop(); 
    for (var i=0; i < list.length; i++){
      if( list[i][0].toString().trim().toLowerCase() === title.toString().trim().toLowerCase()){
          values.push([list[i][0], list[i][1], list[i][2], list[i][3], list[i][4]]); 
       return values;
       }
    }
}

Вот мой код на стороне клиента

    <!DOCTYPE html>
    <html>
      <head>
        <base target="_top">
          <?!= include("CREATEEVENT-CS") ?>
      </head>
      <body onload="addList()">
                <div class="row">
                   <div class="col-25">
                        <label> Event Type </label>
                   </div>
                   <div class="col-75">                   
                        <select id="selectNumber" onchange="jsFunction(this.value)">
                            <option>Choose a number</option>
                        </select>
                   </div>
             </div>

           <?!= include("UPDATEEVENT-JS") ?>
  </body>
</html>

Вот скрипт получения данных

        function jsFunction(value)
        {           
            alert(value);
            google.script.run.withSuccessHandler(getpopuled).GetSelection(value); 
        }

  function getpopuled(dataarray){
     alert(dataarray);
  }

1 Ответ

2 голосов
/ 11 апреля 2020

Моя проблема решена. Я изменил код на стороне сервера, поскольку дата является типом данных с ограниченным доступом для передачи клиенту и возвращает ноль. Поэтому я конвертирую даты в строку типов данных.

function GetSelection(title){
    console.log(title); 
    var ss = SpreadsheetApp.openById("Sheet_ID");
    var sheet = ss.getSheetByName("SheetName"); 
    var Avals = sheet.getRange("A1:A").getValues();
    var Alast = Avals.filter(String).length;   
    var list  = sheet.getRange("A2:T" + Number(Alast)).getValues();
    Logger.log(list); 
    var values = []; 
    values.pop(); 
    for (var i=0; i < list.length; i++){
        if( list[i][0].toString().trim().toLowerCase() === title.toString().trim().toLowerCase() ){
            values.push([ list[i][0], list[i][1], list[i][2], list[i][3],  list[i][4].toString(), list[i][5].toString(),  list[i][6], list[i][7], list[i][8], list[i][9], list[i][10], list[i][11], list[i][12], list[i][13], list[i][14], list[i][15], list[i][16], list[i][17], list[i][18], list[i][19]]); 
       return values;
       }
    }
} 

На стороне клиента я использовал следующие методы для инициализации управления датами из базы данных, и моя проблема решена. Спасибо

TheMaster

за его вклад в объяснение проблемы.

 document.getElementById("eedate").value = new Date(dataarray[0][5]).toISOString().substr(0, 10);
...