使用API和JavaScript-CORS块写入工作表

使用API和JavaScript-CORS块写入工作表,javascript,google-sheets,google-api,xmlhttprequest,Javascript,Google Sheets,Google Api,Xmlhttprequest,我正在使用googleapi和javascript将数据写入googlesheet将数据添加到工作表中可以正常工作。但是,将基本数据写入特定范围将给出“404”和“访问XMLHttpRequest已被CORS策略阻止”错误 您好,这里是第一次编写代码的参与者和初学者。我想请你帮我解决以下问题。我已经试着把问题贴在下面,如果我遗漏了什么,并且我的问题表述不正确,我向你道歉 在a之后,我制作了一个工作代码,将数据添加到google工作表中 function submit_form() { v

我正在使用googleapijavascript将数据写入googlesheet将数据添加到工作表中可以正常工作。但是,将基本数据写入特定范围将给出“404”和“访问XMLHttpRequest已被CORS策略阻止”错误

您好,这里是第一次编写代码的参与者和初学者。我想请你帮我解决以下问题。我已经试着把问题贴在下面,如果我遗漏了什么,并且我的问题表述不正确,我向你道歉

在a之后,我制作了一个工作代码,数据添加到google工作表中

function submit_form() {
    var sheetid = '...';
    var clientid = '...';
    var clientsecret = '...';
    var refreshtoken = '...';
    var accesstoken = false;
    var sheeturl = 'https://sheets.googleapis.com/v4/spreadsheets/'+sheetid+'/values/B6:append?valueInputOption=USER_ENTERED';
    var data = '{"range": "B6", "majorDimension":"ROWS", "values":[["postedText"]]}';
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'https://www.googleapis.com/oauth2/v4/token?client_id='+clientid+'&client_secret='+clientsecret+'&refresh_token='+refreshtoken+'&grant_type=refresh_token');
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xhr.onload = function() {
        var response = JSON.parse(xhr.responseText);
        var accesstoken = response.access_token;
        if(accesstoken) {
            var xxhr = new XMLHttpRequest();
            xxhr.open('POST', sheeturl);
            xxhr.setRequestHeader('Content-type', 'application/json');
            xxhr.setRequestHeader('Authorization', 'OAuth ' + accesstoken );
            xxhr.onload = function() {
              if(xxhr.status == 200) {
                $('#message').html('<p>Success</p>');
              } else {
                $('#message').html('<p>Fail</p>');
              }
            };
            xxhr.send(data);
        }
    };
    xhr.send();
}
我有两个错误-

张贴。。。404

从源代码访问“sheets.googleapis.com/…”上的XMLHttpRequest 'http://...'已被CORS策略阻止:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源

我已经阅读了教程、API设置/credetials和我的代码,但是我找不到任何理由解释为什么APPEND可以工作,而basic write不能

我发现了两个关于API和CORS的问题(,),但没有一个对我有帮助

有人知道为什么追加可以工作,而基本写入不能工作吗?多谢各位

编辑:我还尝试了使用和附加和更新,即基本写入,在通过API资源管理器执行时按预期工作

编辑2:以下是执行代码时的浏览器响应-
而且。

正如在对问题的评论中所说的,问题在于POST-vs-PUT方法

如中所述,以及作为对类似问题的回答发布的中所述,在以下情况下应使用PUT方法。用于附加数据的第一个代码使用

因此,这个问题的解决方案是简单地将POST更改为放入以下代码行

xxhr.open('PUT', sheeturl);

在视频的3:25分左右,它谈到了您将要使用的javascript的起源,以便启用它们。你一定错过了这一部分。@Juan你是说3:02的授权JavaScript源代码吗?我确实在这里设置了我的域(),我的JavaScript文件位于()。是的,我指的是那个部分。打电话时请检查浏览器。在“网络”选项卡的“检查”部分中,您应该看到xhr选项和/或post。当您单击它时,您将能够看到标题。在请求的头之间,应该有一个origin头。检查它是否与您在api中设置的相同。@Juan Yes,在追加和写入代码中,原始请求标头都是我在api中设置的(people.fsv.cvut.cz)-请参阅我添加到问题中的屏幕截图。在“追加代码”的情况下,我也会得到响应头。在“编写代码”的情况下,我没有得到响应头。在中,我发现在编写数据时应该使用PUT请求,而我使用了POST请求。我把帖子改成了PUT,现在可以用了。至于带有append的代码,我不知道它为什么与POST请求一起工作。
xxhr.open('PUT', sheeturl);