Сообщение 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 (первый раз просил разрешения, второй раз я его запустил, я ничего не заметил). Может кто-нибудь мне помочь? Я чувствую, что я очень близко.
Ответы
Ответ 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:
в качестве примера:
-
Перейдите в 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
-
В том же 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
- Опубликуйте приложение как приложение и получите URL-адрес вашего нового Script. Теперь вы можете использовать этот url как встроенный в ваше приложение HTML или приложение для Android. Это. Пользователю будет предложено получить разрешение на открытие этого script