Подтвердить что ты не робот

Сообщение AJAX для электронной таблицы google

Я пытаюсь отправить данные формы в электронную таблицу google. В настоящее время, если форма проверена, происходит следующее:

if (validateForm === true) {
        $.ajax({
            type: 'post',
            url: 'https://docs.google.com/spreadsheet/ccc?key=0AlwuDjMUxwhqdGp1WU1KQ0FoUGZpbFRuUDRzRkszc3c',
            data: $("#workPLZ").serialize(),
            success: alert($("#workPLZ").serialize())
        });
    }
    else {}

Я использовал настройку успеха, чтобы проверить, что мои данные формы правильно сериализованы (это так) и что она успешна. Однако моя электронная таблица google не обновляется (данные не проходят). Я использовал здесь код примера, меняя doGet на doPost (http://mashe.hawksey.info/2011/10/google-spreadsheets-as-a-database-insert-with-apps-script-form-postget-submit-method/) и сделал общедоступную электронную таблицу google (и редактируемую кем-либо), Я выполнил инструкции, скопировав код в googledocs, а затем дважды запустил setUp (первый раз просил разрешения, второй раз я его запустил, я ничего не заметил). Может кто-нибудь мне помочь? Я чувствую, что я очень близко.

4b9b3361

Ответ 1

Хорошо, я придумал решение. Получив информацию о проблемах AJAX в междоменном пространстве, я решил перейти к "t" методу, используемому автором статьи в http://mashe.hawksey.info/2011/10/google-spreadsheets-as-a-database-insert-with-apps-script-form-postget-submit-method/.

Чтобы отправить данные в свою электронную таблицу google, сначала создайте таблицу и измените имя листа (нижний левый угол) на DATA. Затем откройте редактор script (Tools == > script Editor) в вашей таблице и вставьте script из статьи. Измените "doGet (e)" на "doPost (e)". Запустите setUp script дважды. В первый раз, когда он попросит разрешения для запуска (предоставить его), то во второй раз, когда вы его запустите, вы не получите никаких всплывающих индикаций, которые он выполнил (я запустил мой в редакторе, чтобы он сказал "running setUp" выше область ввода кода, но это все). После этого выберите "Опубликовать" в редакторе script, а затем выберите "Опубликовать как услугу". Нажмите переключатель "Разрешить кому-либо ссылаться на эту услугу" и установите флажок "Разрешить анонимный доступ". Скопируйте URL-адрес (ВАЖНО!) И нажмите "Включить услугу". Это была "трудная часть".

В вашей HTML-форме каждый элемент, который вы отправляете, должен иметь атрибут "name" (например,). Это имя - это способ отправки данных - каждая запись прикрепляется к его имени. Убедитесь, что для каждой части данных формы, которую вы собираете, у нее есть имя, и это имя вводится как столбец в вашей таблице (то, как он сопоставляет данные из вашей формы с вашей электронной таблицей). Для вашей формы установите способ для публикации и действия на свой URL-адрес "Опубликовать как услугу" (который я сказал вам сохранить) следующим образом:

<form id="formID" method="post" action="URL" target="hidden_iframe">

Я включил идентификатор формы, поэтому я могу выбрать форму и отправить ее с помощью jquery. В своем HTML перед формой выше добавьте скрытый iframe:

<iframe name="hidden_iframe" id="hidden_iframe" style="display:none;"></iframe>

Установите какую-то проверку формы (не обязательно, но если каждое поле не заполнено, вы получите неполные данные в своей электронной таблице), и если это подтверждено, вызовите jquery.submit(). например:.

    if (formValidation === true){
           $("#formID").submit();
    }
    else {}

Так и получилось. Удачи!

Ответ 2

Поскольку в Google Apps Script теперь есть ContentService, который может возвращать ответы JSON, можно сделать запросы ajax без использования скрытого iframe. В качестве автора статьи оригинального решения я опубликовал обновленную версию этой методики, которая включает пример ajax

Пользователи также могут подумать о переходе на эту новую версию, поскольку она использует другие новые службы Google Apps Script, в частности:

  • с помощью LockService для предотвращения одновременного доступа к записи; и
  • переход на новый PropertyService для хранения данных Script

Ответ 3

Я покажу вам EASY WAY для отправки данных в Google SpreadSheet без AJAX ни Google Form, ни PHP... просто Google SpreadSheet и HTML или даже Android.

  • Создайте новый Google SpreadSheet.
  • Открыть инструменты / script editor

Вам просто нужны два файла в редакторе HTML и Code.gs:

в качестве примера:

  1. Перейдите в File/new HTML name this file = Index.html:

    <!DOCTYPE html>
    <html>
    <head>
    <base target="_top">
    
    <script>
    function Enviar(){
    
    var txt1=document.getElementById("txt1").value;
    var txt2=document.getElementById("txt2").value;
    var txt3=document.getElementById("txt3").value;
    google.script.run.doSomething(txt1,txt2,txt3);
    }
    </script>
    </head>
    
    <body>
    Prueba de Envio de informacion<br>
    <input type="text" value="EMAIL" name="txt1" id="txt1"><br>
    <input type="text" value="CEDULA" name="txt2" id="txt2"><br>
    <input type="text" value="NOMBRE" name="txt3" id="txt3"><BR>
    <Button name="btn1" onClick="Enviar();">Enviar</button>
    </body>
    
    </html>
    

есть 3 поля для отправки: EMAIL, CEDULA, NOMBRE

  1. В том же ScriptEditor перейдите в файл Code.gs и введите:

    function doGet() {
    return HtmlService.createHtmlOutputFromFile('Index')
    .setSandboxMode(HtmlService.SandboxMode.IFRAME);
    }
    
    function doSomething(s1,s2,s3){
    
    Logger.log('datos:'+s1+"  "+s2+"  "+s3);
    var enlace="https://docs.google.com/spreadsheets/d/
    1XuAXmUeGz2Ffr11R8YZNihLE_HSck9Hf_mRtFSXjWGw/edit";
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var ss = SpreadsheetApp.openByUrl(enlace);
    var sheet = ss.getSheets()[0];
    sheet.appendRow([s1, s2, s3]);
    Logger.log(ss.getName());
    }
    

где enlace - это URL вашего SpreadSheet

  1. Опубликуйте приложение как приложение и получите URL-адрес вашего нового Script. Теперь вы можете использовать этот url как встроенный в ваше приложение HTML или приложение для Android. Это. Пользователю будет предложено получить разрешение на открытие этого script