0

我有一个生成数据的 HTML 页面(表格行)。我想将所有客户端的行存储在可以访问/下载的在线表中(最好由所有者单独访问,因此匿名客户端只能添加行)

可能的解决方案和遇到的问题:

  • 谷歌电子表格 + 谷歌应用脚​​本 - 如何进行跨源 POST 请求?
  • 谷歌融合表 - 如何添加来自匿名客户端的行?那可能吗?
  • 谷歌应用引擎 - 可能,但对于这个简单的任务来说似乎太耗时了。
4

1 回答 1

0

我找到了有关如何进行跨域 POST 的答案,因此我设法使用应用程序脚本 + 电子表格来做我想做的事情:

应用脚本:

function doPost(request) {
    var ss = SpreadsheetApp.openById(id);
    var sheet = ss.getSheets()[0];
    if (request.parameters.row != null) {
      sheet.appendRow(Utilities.jsonParse(request.parameters.row));
    }
}

客户端 javascript(来自https://stackoverflow.com/a/6169703/378594):

function crossDomainPost(paramsDict, url) {
    // Add the iframe with a unique name
    var iframe = document.createElement("iframe");
    var uniqueString = "SOME_UNIQUE_STRING";
    document.body.appendChild(iframe);
    iframe.style.display = "none";
    iframe.contentWindow.name = uniqueString;

    // construct a form with hidden inputs, targeting the iframe
    var form = document.createElement("form");
    form.target = uniqueString;
    form.action = url;
    form.method = "POST";

    // repeat for each parameter
    for (i in paramsDict) {
        var input = document.createElement("input");
        input.type = "hidden";
        input.name = i;
        input.value = paramsDict[i];
        form.appendChild(input);   
    }

    document.body.appendChild(form);
    form.submit();
}

crossDomainPost({'row': JSON.stringify([123, 123, 1211])}, serverURL);

请注意,类似的方案应该适用于 Google 融合表。

于 2013-06-01T11:18:14.767 回答