使用POST方法将JSON发送到Google App脚本

时间:2012-11-22 09:55:00

标签: ajax json post google-apps-script

正如标题所说,我想知道是否可以使用POST方法将某种JSON发送到谷歌应用脚​​本。发送JSON后,它将由google脚本处理。

直到现在,我设法使用带有3个输入的标准html表单发送帖子请求(我遵循了本指南: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正确发送到服务器..

我做错了什么?

1 个答案:

答案 0 :(得分:-1)

如评论中所述,它听起来可能像客户端跨域脚本问题。 AJAX调用的来源是关键 - 看起来GAS通常会给你200个生成输出的错误,这应该是“成功”。

您可以将"fail"消息更改为alert("fail:" + JSON.stringify(message))以获取更多调试信息,但在跨域脚本阻止的情况下,信息可能很少(例如,“No Transport” “)。也许mhawksey的修复是票证,或者尝试使用JSONP模式的JQuery AJAX fxnality(参见docs,特别是dataTypethis answer)。