我有一个生成数据的 HTML 页面(表格行)。我想将所有客户端的行存储在可以访问/下载的在线表中(最好由所有者单独访问,因此匿名客户端只能添加行)
可能的解决方案和遇到的问题:
- 谷歌电子表格 + 谷歌应用脚本 - 如何进行跨源 POST 请求?
- 谷歌融合表 - 如何添加来自匿名客户端的行?那可能吗?
- 谷歌应用引擎 - 可能,但对于这个简单的任务来说似乎太耗时了。
我有一个生成数据的 HTML 页面(表格行)。我想将所有客户端的行存储在可以访问/下载的在线表中(最好由所有者单独访问,因此匿名客户端只能添加行)
可能的解决方案和遇到的问题:
我找到了有关如何进行跨域 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 融合表。