【发布时间】:2015-08-01 16:28:57
【问题描述】:
我创建了一个用于发布到 this document 的 google drive 的脚本。
我用
调用它var request = $.ajax({
url: "https://script.google.com/macros/s/AKfycbypnRet5l6gUmoGE8oZV2_6da7fImNU12ejHCHCdOambH7UM2CP/exec",
data: serializedData,
type: "POST",
timeout: 10000,
async: true,
crossDomain: true
});
适用于this jsFiddle。
但是,当我在本地项目中实现完全相同的代码时,它不起作用。我收到了
XMLHttpRequest 无法加载 https://script.google.com/macros/s/AKfycbypnRet5l6gUmoGE8oZV2_6da7fImNU12ejHCHCdOambH7UM2CP/exec。 请求中不存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:3000” 使用权。响应的 HTTP 状态代码为 405。
405 是“不允许的方法”,当我检查网络流量时,我发现对于我的本地请求,方法是
Request Method:OPTIONS
但是,对于 jsFiddle 中的那个,它按预期发布。我做了一些研究,似乎options是跨域时的预检请求,我不能让它直接使用post。
不工作的 OPTIONS 请求具有以下不在工作 Fiddle 请求中的标头:
access-control-request-headers:accept, content-type
access-control-request-method:POST
如果我将相同的请求发布到我的服务器(而不是 Google),我会看到它包含请求标头 Content-Type:application/json; charset=UTF-8。
当不允许使用 options 方法时,jsFiddle 是如何通过的?我能不能让它跳过选项直接发帖?
【问题讨论】:
-
在发送请求之前这样做有效吗? $.support.cors = true;
-
据我所知,没有区别。仍然收到同样的错误。
-
你会尝试在没有端口:3000 的情况下运行它吗?同时我正在考虑一些解决方案
-
如果不指定端口号,我无法真正在本地运行服务器。但是,我确实尝试将其部署到 url 中没有端口号的测试环境,并收到相同的错误。感谢您提供帮助。
标签: javascript jquery cors google-docs