2012-11-22 146 views
1

如標題所示,我想知道是否可以使用POST方法將某種JSON發送到Google應用程序腳本。一旦發送了JSON,它將由google腳本處理。使用POST方法發送JSON到Google App腳本

到目前爲止,我管理使用標準的HTML形式具有3個輸入到發送POST請求(I遵循這個指南:http://mashe.hawksey.info/2011/10/google-spreadsheets-as-a-database-insert-with-apps-script-form-postget-submit-method/)。現在,我想移動到一個Ajax調用發送一些JSON到谷歌的腳本,但我不知道如何..

使用Ajax調用是這樣的:

$.ajax({ 
    type: "POST", 
    url: url, 
    data: "someSortOfData", 
    success: function(data){alert("ok")}, 
    error: function(message){alert("fail")} 
}).done(function(msg) { 
    alert("Data Saved: " + msg); 
}); 

其中「someSortOfData 「是我發送的實際數據(我嘗試使用json,簡單文本,html等)。任何時候我運行這個腳本,這個調用都會繼續進入「錯誤」功能,我不知道爲什麼。

正如我之前說,使用標準的HTML表單提交數據的作品,所以我推測的URL是好的。問題出在我發送的數據上,我想..也許,服務器端,谷歌腳本不期待任何不同於文本?

這是腳本(服務器端)的樣子

function doPost(e) { 
    var ss = SpreadsheetApp.openById(ScriptProperties.getProperty('active')); 
    var sheet = ss.getSheetByName("DATA"); 
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]; 
    var nextRow = sheet.getLastRow(); // get next row 
    var cell = sheet.getRange('a1'); 
    var col = 0; 
    for (i in headers){ 
    val = e.parameter[headers[i]]; 
    cell.offset(nextRow, col).setValue(val); 
    col++; 
    } 

    //return sent data 
    var app = UiApp.createApplication(); 
    var panel = app.createVerticalPanel(); 
    for(p in e.parameters){ 
    panel.add(app.createLabel(p +" "+e.parameters[p])); 
    } 
    app.add(panel); 
    return app; 
} 

我可能需要太多修改這個代碼,但首先我要發送正確的JSON到服務器..

什麼我做錯了?

+0

我忘了說谷歌腳本將來自發布請求的數據寫入谷歌電子表格。 – BeNdErR

+1

你打算從哪裏進行AJAX呼叫?這是一個在Google Apps腳本之上的獨立Web應用程序嗎?你能描述一下你在這裏的高層次分離嗎? –

+0

正如我在帖子中提到的,我嘗試使用ajax提交數據而無需刷新,但遇到了跨域/ XHTTP安全問題。這裏的答案http://stackoverflow.com/questions/10000020/ajax-post-to-google-spreadsheet突出顯示我使用隱藏的iframe技巧,您可能會修改 – mhawksey

回答

-1

正如在評論中指出,這聽起來像潛在客戶端跨域腳本問題。 AJAX調用來自哪裏是關鍵 - 看起來GAS通常會給你一個200甚至是錯誤的產生輸出,這應該是「成功」。

您可能會將您的"fail"消息更改爲alert("fail:" + JSON.stringify(message))以獲得更多調試信息,但是在跨域腳本塊的情況下,信息可能很稀疏(例如,「無傳輸」)。也許mhawksey的解決方案是票據,或者嘗試使用JQuery AJAX fxnality的JSONP模式(請參閱docs,特別是dataTypethis answer)。

相關問題