【发布时间】:2014-07-20 07:31:01
【问题描述】:
我的网站中有一个表单,应该将文本字段“电子邮件”写入谷歌电子表格。 提交表单时,它会调用一个函数,该函数将 jquery ~ v 1.4 ajax POST 发送到谷歌文档。 (我已经测试了 google 表单,它可以工作)
我遇到了 CORS 错误。
跨域请求被阻止:同源策略不允许读取 远程资源在 https://docs.google.com/forms/************************************************ *****/formResponse. 这可以通过将资源移动到同一域或 启用 CORS。
- 我显然无法将 google 文档移动到同一个域。
- 我没有服务器的配置控制权。
- 我不想进行任何会影响的全局 angularjs 更改 网站上使用的许多其他 ajax 和 $httpProvider。
- 我不想将 google 表单作为 iframe 嵌入到网站中。
我的ajax是
$scope.storeEmail = function() {
var email = $scope.fA.email;
$.ajax({type: "POST",
async: true,
url: 'https://docs.google.com/forms/***************************/formResponse',
data: { field_key : email, submit : "Submit"},
success: function(resp) {
// give success feedback and redirect page
}
error: function(xhr, statusText, error){
console.log(xhr);
}
};
我试过了 向 ajax 请求添加凭据和标头
withCredentials: true,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
但是我不能(至少我认为我不能)设置“AccessControlAllow*”参数。
作为注释设置,凭据本身似乎并没有什么不同。 设置标头或使用 PUT 等其他类型会导致“NetworkError: 405 Method Not Allowed”响应。
我尝试使用以下配置 angularjs
App.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}
]);
但是我是 angularjs 的新手,我不知道这是否被放入了正确的文件中,或者它是否会对网站上其他(内部)$httpProvider 使用产生连锁反应。
有人告诉我,我需要为来自我的服务器的所有 HTTP 响应添加一个“Access-Control-Allow-Origin: *”标头。但由于服务器是我的谷歌文档服务器,我认为我不能这样做。
请帮忙。
【问题讨论】:
标签: ajax angularjs google-sheets cors google-docs