【发布时间】:2015-05-29 20:07:30
【问题描述】:
我正在开发一个 Chrome 扩展程序,它本质上是一个简单的自定义 Google 表单,将发布到响应电子表格。我得到了以下函数来成功发送和填充数据一次,但再也不会:
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 请求标头,因为我收到了阻止我的请求的 No 'Access-Control-Allow-Origin' 警告。
作为一个扩展,我还在 manifest.json 文件中添加了以下权限:
"permissions": [
"http://docs.google.com",
"https://docs.google.com",
"https://*.google.com",
]
目前,我不确定究竟是什么阻止了数据发布。可能的迹象可能是,在提交表单时,我收到“显示临时标头”警告,并且服务器响应等待 (TTFB) 时间的时间过长。
我的代码哪里出错了? (出于某种原因,它确实工作过一次。)是否有任何替代解决方案可以将自定义表单发布到电子表格?
【问题讨论】:
-
服务器返回的
datatype是什么?如果是html,则切换到dataType: "html",。 -
确实,来自服务器的响应头
content-type是html。我相应地切换了“数据类型”,但数据仍然没有填充。不过,对于标头请求,我不再收到“显示临时标头”警告。 -
使用
document.getElementById("message").innerText代替document.getElementById("message").innerHTML:developer.chrome.com/extensions/xhr。您是否还在内容脚本中实现跨域 XHR? -
原来我分享的代码一切正常。罪魁祸首实际上是 html 页面上的
input值。首先,我应该指出,此表单使用 Google 表单上的“持续时间”选项,该表单具有小时、分钟和秒的下拉菜单。数字 0 - 9 选项具有单个数字值,而实际上要求所有值都是两位数(01,02 等)才能接受请求。感谢您的意见,gui47。
标签: javascript ajax forms google-chrome-extension google-sheets