1

正如标题所说,我想知道是否可以使用 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/)。现在我想转移到一个将一些 json 发送到谷歌脚本的 ajax 调用,但我不知道如何..

使用这样的 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 发送到服务器..

我做错了什么?

4

1 回答 1

-1

正如评论中所指出的,这听起来确实可能像客户端跨域脚本问题。AJAX 调用的来源是关键 - 即使在生成输出时出现错误,GAS 通常也会给你 200,这应该是“成功”。

您可能会更改您的"fail"消息以alert("fail:" + JSON.stringify(message))获取更多调试信息,但在跨域脚本块的情况下,信息可能是稀疏的(例如,“无传输”)。也许 mhawksey 的修复是票,或者尝试使用 JQuery AJAX fxnality 的 JSONP 模式(请参阅文档,特别是dataType,或此答案)。

于 2012-11-29T23:17:26.240 回答