Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 谷歌应用程序脚本从postdata中删除字符_Google Apps Script_Postdata - Fatal编程技术网

Google apps script 谷歌应用程序脚本从postdata中删除字符

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应用

当将数据发布到我的google电子表格web应用程序脚本时,google会从postdata中删除挪威字符。e、 postData.contents正确,但e.parameters不正确。请参见下面的代码示例。当您按send时,您将看到google脚本返回的e.parameters和e.postData.contents是不同的

要使用您自己的google电子表格web应用程序重现此问题,请执行以下操作:

  • 复印
  • 在电子表格中,选择工具->脚本编辑器
  • 在脚本编辑器中,选择发布->部署为web应用
  • 在打开的对话框中,将“谁有权访问应用程序”设置为“任何人,甚至匿名”。最后,按“部署”
  • 现在,您被告知需要为脚本授予权限。按“查看权限”。一条消息告诉您,只有在信任开发人员的情况下,才应允许运行此脚本。点击“高级”并点击bootom上的链接。单击允许
  • 在出现的新对话框中,复制“当前web应用程序url”的地址
  • 在代码示例中,将变量actionscript替换为步骤6中复制的地址
  • 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参数不起作用的原因。谢谢你给我指明了正确的方向。我将发布适合我的代码。