使用AJAX将数据发布到Google表单

时间:2018-08-23 22:23:23

标签: javascript ajax google-docs

我试图将数据从AJAX发布到AJAX到Google表单,但是即使状态码为0的报告成功,数据也永远不会以以下形式出现:

var dat={ "entry.529474552" :"data1", "entry.1066559787": "name1"};
postToGoogle("1FAIpQLSf4w1OQGsIncaiqXlmfAl4jYSt-e4Zx3xVJa7Weob4LnQbRZQ",dat);

function postToGoogle(id, dat) {
    $.ajax({
        beforeSend: function (xhr) {
            xhr.setRequestHeader('Access-Control-Allow-Origin', 'chrome-extension://EXTENSION_ID');
            xhr.setRequestHeader('Access-Control-Allow-Methods', 'GET, POST, PUT');
            },
        url: "https://docs.google.com/forms/d/e/"+id+"/formResponse",
        data: dat, 
        type: "POST",  
        dataType: "xml",
        xhrFields: {  withCredentials: true },
        statusCode: {
            0:   function() {  console.log("OK") },
            200: function() {  console.log("error") },
            }
        });
    }

它会产生CORS错误,但据说应该通过POST。

3 个答案:

答案 0 :(得分:2)

  

它会产生CORS错误,但据说应该通过POST。

虽然可以发出成功的POST请求,出现CORS错误并且无法读取响应,但这仅适用于简单请求。

因为您的请求具有:

  • 自定义标头(Access-Control-Allow-OriginAccess-Control-Allow-Methods,它们是响应标头,并且一开始就没有业务在请求中)
  • 凭据(即您已设置withCredentials: true

...这是一个预检请求。

在浏览器发出POST请求之前,它将发出OPTIONS请求以请求许可。

由于未获得许可,因此请求失败。


请注意,即使您确实将其转换为简单的请求并成功进行了POST,您仍将获得0的状态。发生CORS错误时,您无法读取状态。

答案 1 :(得分:2)

针对那些希望在2019年4月之前执行此操作的人

我今天正在研究这个。当前答案如下:

Google表单中的每个字段都有唯一的ID。为了检索它,请填写您希望以编程方式提交的所有相关表单字段,以获取预填充的链接

注意:为了确保可以不受限制地访问URL,您还希望仅对域禁用限制(对于GSuite付费用户)

Google Forms Interface

然后,复制链接并粘贴到浏览器中。该URL的基本格式如下:

https://docs.google.com/forms/d/e/[FORMID]/formResponse

每个参数都是键/值对,其类型为:entry.XXXXXX =值

预填充的链接将为您提供每个相关字段的XXXXX值

请求必须带有以下标头:

方法: GET

内容类型: application / x-www-form-urlencoded

最终请求看起来像这样

https://docs.google.com/forms/d/e/123332233bsj333/formResponse?entry.123456=value1&entry.2333442=value2&submit=Submit

别忘了在您的请求末尾添加Submit = Submit!

答案 2 :(得分:0)

更好的选择是: 401 or 403

但是我有一个问题,在提交屏幕后如何自定义,并显示消息:谢谢,您的回复已发送。