我已经建立了一个API网关,可以在AWS上调用lambda函数。 GET的链接是:
https://z4eiy7g9n0.execute-api.us-east-1.amazonaws.com/test/rotation
单击它应该返回一个大于6000的数字。我想使用Javascript来获取API,我的理解是我需要使用AJAX来做到这一点。所以,我有以下javascript(导入jQuery 3.1.1):
$(document).ready(function(){
$("button").click(function(){
$.ajax({
url: "https://z4eiy7g9n0.execute-api.us-east-1.amazonaws.com/test/rotation",
headers: {"Content-Type": "text/json"},
type: "GET",
success: function() { alert('Success!'); }
});
});
});
由于跨源的原因,这不起作用,所以我的理解是我需要启用CORS。所以,我按照http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html中的说明进行操作。我有
Access-Control-Allow-Origin*: '*'
Access-Control-Allow-Headers: 'Content-Type'
我对此的理解是,原点可以是任何域,唯一需要包含的标题是“内容类型”。但是,当我单击我的按钮来触发此事件时,我在控制台中收到以下错误。
XMLHttpRequest无法加载 https://z4eiy7g9n0.execute-api.us-east-1.amazonaws.com/test/rotation。 对预检请求的响应没有通过访问控制检查:否 '访问控制允许来源'标题出现在请求的上 资源。起源' http:// ****'因此不允许访问。该 响应有HTTP状态代码403。
现在,我可以使用httr
包从R调用API,所以我知道可以从至少某些系统调用它。
我的AJAX请求或API有什么问题?
答案 0 :(得分:0)
我已经成功使用AJAX连接到支持CORS的API,我不记得在标题中传递内容类型。您是否尝试过application/json
而不是text/json
?我相信这是AWS控制台上CORS向导配置的方式。
答案 1 :(得分:0)
问题是我没有在启用CORS的情况下部署修改后的资源。一旦我部署了资源,javascript就开始正常运行了。