从网站表单写入Google文档时遇到CORS错误

时间:2014-05-30 13:54:41

标签: ajax angularjs google-sheets cors google-docs

我的网站上有一个表格应该写一个文本字段" email"到谷歌电子表格。 提交表单时,它调用一个函数,将jquery~v 1.4 ajax POST发送到google docs。 (我已经测试了谷歌表格并且有效)

我遇到了CORS错误。

  

阻止跨源请求:同源策略禁止读取   远程资源在   https://docs.google.com/forms/ ****************************************** ******* / formResponse。   这可以通过将资源移动到同一个域来修复   启用CORS。

  • 我显然无法将谷歌文档移动到同一个域。
  • 我没有服务器的配置控制。
  • 我不想做任何会影响的全局angularjs更改 许多其他的ajax& $ httpProvider在网站上使用。
  • 我不想将谷歌表单作为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 Methoded"响应。

我尝试使用以下

配置angularjs
App.config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.useXDomain = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
  }
]);

然而,我是angularjs的新手并且我不知道这是否被放入正确的文件中,或者它是否会对网站上的另一个(内部)$ httpProvider使用产生影响。

我被告知需要添加一个" Access-Control-Allow-Origin:*"从我的服务器的所有HTTP响应的标头。但由于服务器是我的谷歌文档服务器,我不认为我可以做到这一点。

任何帮助请。

1 个答案:

答案 0 :(得分:0)

我知道的跨域请求的两个选项是jsonp和CORS。 CORS - 正如您已经注意到的 - 要求托管服务器在响应中包含CORS头。根据它的声音,Google文档网站没有。

谷歌确实有各种各样的jsonp选项,但是所有内容都没有丢失 - https://developers.google.com/gdata/samples/spreadsheet_sample

您可以将自己的服务器用作中间人,甚至可以使用cors代理等服务将您需要的标头添加到您要求的Google内容中,而无需支付带宽。< / p>

http://www.corsproxy.com/ http://en.wikipedia.org/wiki/Cross-origin_resource_sharing