2012-11-22 144 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)。

相关问题