Javascript 如何通过jQuery和Ajax将Google表单数据发布到电子表格
我正在开发一个Chrome扩展,它本质上是一个简单的自定义Google表单,可以发布到响应电子表格中。我获得了以下功能,只成功发送和填充了一次数据,但再也没有了:Javascript 如何通过jQuery和Ajax将Google表单数据发布到电子表格,javascript,ajax,forms,google-chrome-extension,google-sheets,Javascript,Ajax,Forms,Google Chrome Extension,Google Sheets,我正在开发一个Chrome扩展,它本质上是一个简单的自定义Google表单,可以发布到响应电子表格中。我获得了以下功能,只成功发送和填充了一次数据,但再也没有了: function postFormToGoogle() { var timeOne = $("#time1hour").val(); var timeTwo = $('#time2hour').val(); var timeThree = $('#time3hour').val(); $.ajax({
function postFormToGoogle() {
var timeOne = $("#time1hour").val();
var timeTwo = $('#time2hour').val();
var timeThree = $('#time3hour').val();
$.ajax({
url: "https://docs.google.com/forms/d/FORMKEY/formResponse",
beforeSend: function (xhr) {
xhr.setRequestHeader('Access-Control-Allow-Origin', 'chrome-extension://EXTENSION_ID');
xhr.setRequestHeader('Access-Control-Allow-Methods', 'GET, POST, PUT');
},
data: { "entry_856586387": timeOne,
"entry_244812041": timeTwo,
"entry_2138937452": timeThree },
type: "POST",
dataType: "xml",
xhrFields: {
withCredentials: true
},
statusCode: {
0: function () {
document.getElementById("message").innerHTML = "Your form has been submitted!";
window.location.replace("ThankYou.html");
},
200: function () {
document.getElementById("message").innerHTML = "Your form has been submitted!";
console.log("Success");
window.location.replace("ThankYou.html");
}
}
});
}
我必须包含cors请求头,因为我收到了一个“禁止访问控制允许来源”的警告,该警告阻止了我的请求
作为扩展,我还向manifest.json文件添加了以下权限:
"permissions": [
"http://docs.google.com",
"https://docs.google.com",
"https://*.google.com",
]
在这一点上,我不确定到底是什么阻止了数据发布。可能的迹象是,在提交表单时,我收到了“显示临时标题”警告,服务器等待(TTFB)时间过长,无法响应
我在代码中哪里出错了?(出于某种原因,它确实工作过一次。)有没有其他解决方案可以将自定义表单发布到电子表格中?我就是这样做的。。。 你可以看到你收到一个CORS错误,但它是有效的。。。数据到达了它应该到达的地方
function postToGoogle() {
var field3 = $('#feed').val();
$.ajax({
url: "https://docs.google.com/forms/d/[key]/formResponse",
data: {"entry.347455363": field3},
type: "POST",
dataType: "xml",
statusCode: {
0: function() {
//Success message
},
200: function() {
//Success Message
}
}
});
}
查看更多信息从服务器返回的
数据类型是什么?如果是html
,则切换到dataType:“html”
。实际上,来自服务器的响应头content-type
是html
。我相应地切换了“数据类型”,但数据仍然没有填充。但是,我不再收到标题请求的“显示临时标题”警告。请使用document.getElementById(“消息”).innerText
而不是document.getElementById(“消息”).innerHTML
:。您是否在内容脚本中实现了跨域XHR?事实证明,使用我共享的代码一切都很好。罪魁祸首实际上是html页面上的输入值。首先我应该指出,这个表单使用的是Google表单上的Time Duration选项,它有小时、分钟和秒的下拉菜单。数字0-9选项有一位数的值,实际上要求所有值都是两位数(01、02等)才能接受请求。感谢您的输入,gui47.CORS在扩展中不会有问题。我可以用这种方式发送数据,但如果我在google表单中有多个部分,那么如何发送下一部分的值?这会将表单数据发送到我的响应电子表格,但CORS会抛出错误,因此我无法执行验证和成功行为。如果是成功发布和未成功发布,则状态代码为0。