не удалось найти функцию скрипта doget
Script function not found: doGet #96
Comments
Seeley4 commented Mar 30, 2017
I’ve followed these instructions exactly, and when I test the code I get the error: «Script function not found: doGet». A bit of google searching seems to suggest that I can’t create a webapp without a doGet, but your code doesn’t have one. What should I do?
The text was updated successfully, but these errors were encountered:
mckennapsean commented Mar 30, 2017
Could you please include a minimal, working, verifiable example that reproduces your problem? Feel free to explain which steps you walked through, highlight any changes to the code you made. For example, see https://stackoverflow.com/help/mcve
You can host it on your own site, GitHubPages, or sites like CodePen. And include a link to your Google Spreadsheet, if you can, so we can take a look at what is set up.
Did you follow step 5) exactly? In the image, it shows the permissions set to «anyone, even anonymous», and if this is not set right then it cannot work. The Google Script should have a function doGet that should run when you send it the form data.
joshrio commented Apr 19, 2017
I had the same issue.
Make sure that you include method=»POST in
modermo commented May 18, 2017
Same issue for me too. This happens when you «Test web app for your latest code»
mkhalila commented Jul 30, 2017
@joshrio I already have POST set as the HTML form method yet it’s still prompting me with the doGet error
mckennapsean commented Jul 30, 2017
Does anyone have a working example to share that reproduces this issue?
It is kind of hard to debug since I cannot reproduce it. If you are using older browsers, that may affect the Javascript functionality, but any evergreen browser should work fine. There are many ways that altering code or not adding something may break the script. Check the console to see if error messages appear. You should not be forwarded to a new page if you are using the custom Javascript on here as well, though if you aren’t it may still submit and send you to a new page with the AJAX result.
mkhalila commented Jul 30, 2017
I’m running the latest Chrome browser here.
However I have found the solution!
So added:
function doGet(e)
mckennapsean commented Jul 30, 2017
Generally, you would want to submit form data with POST, not GET:
mkhalila commented Jul 30, 2017 •
Rather embarrassingly tho, the actual problem was: My clients email inbox wasn’t receiving any emails at all. The cause of this was the hosting procedure. The domain was bought via Google admin (and connected to a partner domain site) but when I hosted the site on an independent vendor, I had to configure the name servers of the domain to point to the hosting sites name servers. Turns out, that left the mail that was initially being directed to Gmail servers, to be disconnected! So, my client has lost out on 10 days of emails to their inbox :/ Fixed now but something new learnt at a very costly price
Probably safe to close this issue now, since the doGet thing is clarified now as not being a problem
mckennapsean commented Aug 13, 2017
This common error can be pulled into a FAQ, which we hope to put together shortly.
Как получать данные от сторонних сервисов — создаем вебхук с помощью Google Apps Scripts
При внедрении бизнес-процессов важно получать данные от внешних сервисов при наступлении того или иного события — это может быть передача данных из CRM-систем, сервисов оплаты, систем аналитики, интернет-магазинов. В большинстве таких случаев вам нужен вебхук.
Если вам нужно оперативно обработать полученные через вебхук данные, можно воспользоваться настройкой вебхука в Google Apps Scripts.
Вначале необходимо создать новый проект. Сделать это можно несколькими способами:
Дайте название вашему проекту. По умолчанию вам будет предоставлен файл Код.gs и создана пустая функция myFunction(). В этой среде будем обрабатывать данные, полученные от внешней системы. Как же наш код примет эти данные? Для этого мы развернем скрипт как веб-приложение, которому будет выделен публичный веб-адрес.
В меню выбираем «Опубликовать» — «Развернуть как веб-приложение».
Указываем текущую версию нашего приложения, например, v1.0. Выполнение скрипта оставляем из-под нашего аккаунта. В поле “Who has access to the app” выбираем “Anyone, even anonymous”:
Жмем Deploy. Копируем сгенерированный URL.
Обратите внимание, что были сгенерированы два URL-адреса: текущий URL нашего веб-приложения, который заканчивается сегментом /exec и тестовый URL под анкором latest code, который заканчивается сегментом /dev. Первый URL — рабочий, который и будет играть роль вебхука.
Любые изменения в скрипте потребуют повторного деплоя с указанием новой версии. Если же вы хотите наблюдать за результатом своих изменений, не меняя каждый раз версию скрипта, используйте тестовый URL, который будет всегда запускать последний сохраненный код.
Наше приложение развернуто, и мы можем принимать данные извне. Однако, если вы откроете URL в браузере, вы столкнетесь с ошибкой: «Не удалось найти функцию скрипта: doGet».
Так происходит, потому что в нашем скрипте пока нет функций, которые перехватывали бы полученные данные. Для этого в GAS предусмотрено два зарезервированных метода: doGet() и doPost(), которые отвечают за получение значений, отправленных с помощью GET и POST запросов соответственно.
Формат, в котором эта переменная предоставляет данные — JSON. С полным перечнем доступных полей можно ознакомиться в документации в разделе Request Parameters. Нас интересует поле e.parameter, через которое мы и будем получать значения необходимых параметров. Возникает вопрос: к каким переменным обращаться?
Набор параметров, который внешняя система будет отправлять на ваш URL, зачастую предусмотрен самой системой и приведен в документации по использованию вебхуков. Если вы не желаете получать абсолютно все возможные переменные, некоторые сервисы позволяют вам выбирать интересующие поля из общего множества.
Например, при настройке вебхука в сервисе UptimeRobot на мой URL будут отправлены данные:
В итоге, внутри метода doGet(e) я могу обратиться к любому из вышеперечисленных полей: e.parameter.monitorUrl, e.parameter.alertType, e.parameter.alertDetails и так далее. Всё это работает и для метода doPost(e).
Есть объект parameter, а есть объект parameters. Отличие в том, что каждый ключ в parameters содержит соответствующий массив значений, в то время как каждый ключ в parameter — только единичную величину.
Получив доступ к данным, можем обработать их или отправить через API в другие сервисы. Рассмотрим разные способы отправки.
Вывод данных в таблицу Google Spreadsheets
Если хотим анализировать данные в таблице, можем записывать их в документ при каждом обращении к вебхуку с помощью класса SpreadsheetApp.
Настройка оповещений через бота Telegram
Чтобы создать своего бота, просто напишите пользователю @BotFather и следуйте его инструкциям. Как только вы создали бота и получили свой ключ (токен) авторизации, переходите в раздел документации Bot API, чтобы выполнить необходимые настройки. Для отправки сообщений нам понадобится api-метод sendMessage(), который принимает следующие параметры: chat_id (в данном случае ваш персональный ID в телеграм), text — передаваемое сообщение и (опционально) parse_mode — формат, в котором отправляем сообщение. Бот @my_id_bot подскажет ваш персональный айди.
«; var url = telegramUrl + «/sendMessage?chat_id=» + id + «&parse_mode=html&text=» + text; var response = UrlFetchApp.fetch(encodeURI(url));>
Отправка данных на почту
С помощью класса MailApp легко отправить данные и на свой электронный ящик. Подробнее о возможностях класса читайте в документации.
Кроме рассмотренных выше примеров, этот подход можно применять для решения других задач, когда необходимо получить данные от внешних сервисов при наступлении определенного события.
Хотите узнать больше о решениях для бизнес-процессов? Подписывайтесь на нашу рассылку:
Форум
Справочник
Здравствуйте Рабочий шаблон добавления страницы уже есть: Но как мне сделать следующую вещь? При запуске любого скрипта вне среды программирования выдает ошибку: Функцию сценария doGet не найдено В JS не секу практически вообще, к сожалению( Буду рад любой помощи! В функции doGet добавляешь нужные компоненты, как-то так: В функции обработчике клика считываешь данные с полей: Ну и переписываешь функцию создания страницы, чтобы она принимала нужные параметры: Это просто чудо! Оставьте мне свой кошелек WMZ И можете еще подсказать, как также передавать параметр нужного сайта и параметр url страницы? Я добавил в doGet такое: Но новые поля даже не появляются в обновленном скрипте Это будет верным вариантом? | |
Сообщение от korodron | |
И можете еще подсказать, как также передавать параметр нужного сайта и параметр url страницы? | |
Допишите в doGet параметр e, вот так:
И можете внутри нее получать параметры так:
В URL они будут выглядеть так:
Странно, по идее должно работать. Вы код сохраняли и задеплоили? Сейчас проверил у себя, работает. Вот код, который тестил у себя:
В принципе, должно работать, если права доступа к сайтам у приложения есть. У меня по крайней мере работает.
Дабы не плодить новых тем, спрошу здесь.
Решил попробовать гугл-диск как файловый хостинг, и сразу столкнулся с проблемой получения ссылки на файл, поскольку файлов овер чем. много, в общем.
Рытье инета дало следующие результаты:
вот тут http://catamobile.org.ua/drevovidnay. gle-drive.html есть скрипт, который выводит дерево с именами всех файлов на гуглдиске. Кириллические, правда, коверкает, но старому ДОСовцу это по барабану.
Нашел еще вот что
===
Работа с Google Drive
Google Apps Script может работать с файлами пользователя, размещенными на Google Drive. Этот скрипт выводит в консоль имена всех файлов пользователя:
var files = DriveApp.getFiles();
while (files.hasNext()) <
var file = files.next();
Logger.log(file.getName());
>
К файлам можно применять несколько десятков различных методов. Вот некоторые из них:
Я, очевидно, новичок в Google Apps Script, тем не менее у меня есть некоторый опыт в кодировании на C, PHP и Java. Поскольку мы хотели бы создать небольшой CRM в нашей компании с Google Apps Script, нам нужно создать приложение с формой, доступной на сайтах Google. Я долго искал ответ на эту проблему, я, к сожалению, не нашел ответа. У меня есть такой код:
Я боюсь, что на вашей стороне есть небольшое недоразумение относительно использования функции doGet(). Если вы хотите запустить приложение как webapp, doc говорит, что он должен содержать функцию doGet, но то, что она не говорит явно, является что эта функция должна быть отправной точкой всего приложения, т.е. функции, которую в первую очередь вызовет URL-адрес. Поэтому не имеет смысла, чтобы функция doGet вызывалась из так называемой «основной» функции, поскольку «основная» функция не является основной функцией.
Я не могу представить себе ситуацию, когда какая-то функция вызывает функцию doGet, поскольку каждая функция из script вызывается изначально (прямо или косвенно) из этой функции doGet. фактически «конец» любого другого функция в script ‘возвращает’ к исходной функции doGet. Это может быть не совсем верно в каждом случае, но это дает вам общее представление о том, как это работает.
Я надеюсь, что это достаточно ясно и, чтобы вернуться к вашему фрагменту кода, если вы удалите вызов doGet (e), он задумает показать приятное «Я люблю приложения Script!» но он никогда не сделает ничего другого, конечно, не увидит «главную» функцию.
Функция скрипта не найдена: doGet
Я продолжаю получать это сообщение об ошибке, когда пытаюсь нажать кнопку «Test web app for your latest code.» в диалоговом окне публикации.
Но я не определил никакой функции с именем doGet().
3 ответа
У меня возникли проблемы с плагином jCal. У меня нет ошибок javascript, когда страница загружается локально, однако когда страница загружается онлайн, функция jCal не может быть найдена. Я думаю, что функция jCal вызывается до выполнения файла jCal/jCal.js. http://aidnetgc.com/test/volunteer.html
Каждое веб-приложение в Google Apps Script должно иметь основную функцию с именем doGet(), которая является точкой входа в приложение, функцию, с которой ваше приложение будет запускаться при вводе веб-приложения url.
Если вы прочтете документацию, вы увидите, что все примеры автономных приложений для HTMLService или UiApp имеют функцию doGet.
Это правило не распространяется только на встроенные в контейнер сценарии пользовательского интерфейса или сценарии, выполняемые на триггерах.
Как сказал Серж Инсас, сначала вы должны реализовать функцию doGet(e), как описано в документации Google.
Однако после его реализации обязательно сохраните новую версию проекта (Файл > Управление версиями. а затем сохраните новую версию), а затем разверните новую версию своего веб-приложения. В противном случае вы будете продолжать получать ошибку «doGet not implemented» от Google. Это связано с тем, что он все еще использует старую версию вашего приложения до того, как вы внедрили doGet.
Я получил эту ошибку, потому что я определил функцию doPost() в своем скрипте Google, но моя форма отправляла запрос GET, а не запрос POST.
Решение этой проблемы состояло в том, чтобы отправить запрос POST из формы:
Похожие вопросы:
Каждый раз, когда я разворачиваю упражнение из Pulling data into a template из https://developers.google.com/apps-script/html_service, я получаю сообщение Unknown macro doGet В этом упражнении.
Вот мой код. Ик работает нормально от отладки и от запуска в пользовательском интерфейсе кода, но при запуске от нажатия кнопки пользовательского меню я получаю эту ошибку: Функция скрипта не.
У меня возникли проблемы с плагином jCal. У меня нет ошибок javascript, когда страница загружается локально, однако когда страница загружается онлайн, функция jCal не может быть найдена. Я думаю.
Я работаю над тем, чтобы связать изображение в моем документе Google Sheet с определенной ячейкой на другой вкладке. Я делаю это, создавая простую функцию, которая будет делать это. Однако, когда я.
У меня есть функция javascript, которая открывает страницу с помощью метода Servlet doGet. Как в Js: var a = xxx?key=value; window.open(a); Здесь xxx сопоставляется с сервлетом AAA, который.
Я создал рубрику, в которой есть ячейки, которые меняют цвет, когда xx добавляется в ячейку. Вместо того чтобы вводить данные в каждую отдельную ячейку при оценке моих студентов, я хотел, чтобы xx.