Google apps script 谷歌应用程序脚本从postdata中删除字符
当将数据发布到我的google电子表格web应用程序脚本时,google会从postdata中删除挪威字符。e、 postData.contents正确,但e.parameters不正确。请参见下面的代码示例。当您按send时,您将看到google脚本返回的e.parameters和e.postData.contents是不同的 要使用您自己的google电子表格web应用程序重现此问题,请执行以下操作:Google apps script 谷歌应用程序脚本从postdata中删除字符,google-apps-script,postdata,Google Apps Script,Postdata,当将数据发布到我的google电子表格web应用程序脚本时,google会从postdata中删除挪威字符。e、 postData.contents正确,但e.parameters不正确。请参见下面的代码示例。当您按send时,您将看到google脚本返回的e.parameters和e.postData.contents是不同的 要使用您自己的google电子表格web应用程序重现此问题,请执行以下操作: 复印 在电子表格中,选择工具->脚本编辑器 在脚本编辑器中,选择发布->部署为web应用
var actionScript=”https://script.google.com/macros/s/AKfycbxW1qHugD1K4adTjGAEt1KqbcbAn1LlaCoWx6GtlNdsNO_E-rTO/exec";
$(文档).ready(函数(){
var sendButton=$(“#发送”);
if(sendButton!=null)
{
Send按钮。单击(handleSend);
}
});
函数handleSend(事件){
var data=$(“#name”).val();
控制台日志(数据);
var postData=“name=”+数据;
console.log(postData);
请求=$.ajax({
url:actionScript,
类型:“post”,
数据:postData,
beforeSend:函数(){
控制台日志(“加载”);
},
错误:函数(jqXHR、textStatus、errorshown){
console.log(jqXHR);
console.log(textStatus);
console.log(错误抛出);
},
成功:功能(结果){
控制台日志(“成功”);
var s=“e.parameters=“+result.data+”e.postData.contents=“+result.postData+””
$(“#结果”).html;
调试器;
},
完成:函数(){
console.log('Finished all tasks');
}
});
}
发送
到目前为止,我的最终解决方案:)是只使用encodeURIComponent对发布到google脚本的数据进行编码:
encodeuri组件(数据)
在谷歌脚本方面,e.parameters将正确解码,至少对挪威字符æøå是这样
底部的代码段使用encodeURIcomponent更新,即使用上述解决方案
----
在我得出上述结论之前,我经历了以下几点,我认为这对其他人也有帮助:
btoa(数据)没有以正确的方式对挪威字符“æøå”进行编码。我不得不这么做
window.btoa(unescape(encodeURIComponent(data)))
正如这里所建议的:
并帮助我将其理解为window.btoa(“æå”)=“5vjl”,而使用UTF-8编码输入æå将得到“w6bDuMOl”
在谷歌应用程序脚本方面,我必须有以下代码:
var decodedData=Utilities.base64Decode(例如参数[“name”])代码>
var decodedDataAsString=Utilities.newBlob(decodedData.getDataAsString()代码>
var actionScript=”https://script.google.com/macros/s/AKfycbwbYukbEejyL4yNlbW7xdfXPVZkZFJ7StxUIrKC/exec";
$(文档).ready(函数(){
var sendButton=$(“#发送”);
if(sendButton!=null)
{
Send按钮。单击(handleSend);
}
});
函数handleSend(事件){
var data=$(“#name”).val();
var data2=组件(数据);
console.log(data2);
var postData=“name=”+data2;
console.log(postData);
请求=$.ajax({
url:actionScript,
类型:“post”,
数据:postData,
beforeSend:函数(){
控制台日志(“加载”);
},
错误:函数(jqXHR、textStatus、errorshown){
console.log(jqXHR);
console.log(textStatus);
console.log(错误抛出);
},
成功:功能(结果){
控制台日志(“成功”);
var s=“e.parameters['name']=”+result.data+”e.postData.contents=“+result.postData+””
$(“#结果”).html;
},
完成:函数(){
console.log('Finished all tasks');
}
});
}
发送
是否有特殊原因导致您不能仅使用e.postData.contents
?请在发送之前尝试将数据编码到base 64,然后在应用程序脚本代码中对其进行解码<代码>数据=window.btoa(数据)
然后var decoded=Utilities.base64Decode(base64data)代码>在应用程序脚本代码中,如果我使用e.postData.contents,我必须自己将内容解析为参数。它本来会起作用,但我更愿意找出e参数不起作用的原因。谢谢你给我指明了正确的方向。我将发布适合我的代码。