2012-11-02 18 views
0

我有一個使用HtmlServices製作的網頁。 此頁面有一個表單,我想提交給一個GAS Web應用程序,使其表現爲Web服務。試圖在Google應用腳本HTMLService中使用Ajax Post(Caja干擾?)

當我使用谷歌應用程序腳本UrlFetch從我的第一個GAS應用程序調用我的Web服務時,我經常會發生超時。不幸的是,我們無法設置GAS UrlFetch超時值,我認爲這個值在10秒左右。 GAS應用僅需10秒即可複製文件,打開/編輯電子表格併發送電子郵件!

因此,我決定使用Jquery並在使用HtmlServices構建的網頁中執行ajax post(因爲我可以設置超時值)。 (所以我的網頁被Google Caja消毒)。據說Jquery得到了Caja的支持。

但我注意到,Ajax URL總是被重寫爲第一個Web應用程序URL(我想發佈的URL由Caja改變,我認爲)。對我來說,Google的Caja阻止了Ajax調用。 我在GAS HtmlService中找不到任何關於Caja/Ajax郵局的限制。

對於如何從GAS Web App調用Web服務而不受GAS超時的限制,您有什麼建議嗎?

+0

澄清 - 您有一個基於Apps腳本和基於Apps腳本構建的服務的Web應用程序。你想讓Web應用程序向服務提交數據?這聽起來是對的嗎? –

+0

是的,它有很好的理由,因爲它們都不在同一組共享權限上運行!其中一個以用戶訪問該頁面的方式運行,另一個以我的身份運行併爲我執行某些操作。 – VanacK

+0

我從來沒有嘗試過這個,但它確實是一個很好的用法。你有沒有嘗試普通的JavaScript? jQuery和Apps腳本最近播放不好。有一個AJAX示例[here](http://vanilla-js.com/)。 –

回答

2

我現在可以給出的最好建議是使用JSONP而不是Ajax來撥打電話。在這種情況下,你不應該看到超時,它應該可以正常工作。

0

夫婦從部署在script.google.com到部署在script.google.com內容服務的Web應用程序的事情

  1. AJAX調用(使用jQuery或香草JS)不起作用。我已經證實了這一點,我相信這是一個安全限制。我嘗試了幾種不同的解決方法,看起來沒有短期選項。

  2. 關於UrlFetchApp的服務器端選項。我相信超時實際上是30秒。但是,這可能還不夠,看起來你經常遇到這種情況。

所以基本上我推薦的第三個(較不理想)選項是基於「隊列」的方法。在這種方法中 - 讓您的HTML Web應用程序調用ScriptDb隊列。然後,您可以有一個定時觸發(每分鐘或每小時)與您一起運行以執行必要的操作。只需在兩個腳本之間共享相同的腳本庫,以便可以共享隊列的腳本數據庫引用。

+0

因爲我們要進入解決方法路徑,所以我使用的是創建Google表單並設置腳本運行onFormSubmit,外部腳本通過提交表單(可能帶有參數)「調用」另一個腳本。既然這兩個腳本都是你的,那麼可以通過訪問它的scriptdb(作爲一個庫)並寫入它來「回答」原始表單。 –