我正试图绕过ajax调用和aws lambda,但我一直在用我能想到的最简单的例子挣扎几个小时:只是让javascript / jquery对lambda进行ajax调用,让lambda返回发送'blah'文本,然后在浏览器的警报中打印出来。 请帮忙! 我已经创建了一个带有post的lambda函数,这个函数似乎有用(当我在浏览器中访问url时,我在浏览器中看到了blahh):
def lambda_handler(a, b):
return({
"isBase64Encoded": True,
"statusCode": 200,
"headers": { "headerName": "headerValue"},
"body": "blahhh"
})
我的html文件如下:
<!doctype html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
</head>
<body>
<script> window.alert( "before" ); </script>
<script>
$.ajax(
{
url: 'https://npvkf9jnqb.execute-api.us-east-1.amazonaws.com/v1',
type:'GET',
dataType: 'text',
success: function(data) {
window.alert(data);
}
});
window.alert( "after" );
</script>
</body>
</html>
我的API网关设置是:GET方法(以及具有相同配置的POST),具有集成类型Lambda函数,使用Lambda Integration,在我们的东1区域,指向mylambdafunction(上面写着)。所有其余的都是默认的。我做了enabe CORS。
日志看起来像是连续重复以下内容:
START RequestId: 40847960-c98f-11e8-9191-818092ca5731 Version: $LATEST
END RequestId: 40847960-c98f-11e8-9191-818092ca5731
REPORT RequestId: 40847960-c98f-11e8-9191-818092ca5731 Duration: 0.37 ms
Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 21 MB
START RequestId: 499d769b-c990-11e8-8ba2-2568c94a15d7 Version: $LATEST
END RequestId: 499d769b-c990-11e8-8ba2-2568c94a15d7
REPORT RequestId: 499d769b-c990-11e8-8ba2-2568c94a15d7 Duration: 1.18 ms
Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 21 MB
.....
但是当我在浏览器中打开.html文件时,似乎没有成功的ajax部分。我错过了什么?欢迎任何帮助,因为我是一个完全的初学者!
在type: 'POST'
之后你错过了一个逗号
$.ajax(
{
url: 'https://npvkf9jnqb.execute-api.us-east-1.amazonaws.com/v1',
type:'POST',
dataType: 'text',
success: function(data) {
window.alert(data);
}
});
我将总结我在错误的步骤中找到的解决方案:
无法加载https://npvkf9jnqb.execute-api.us-east-1.amazonaws.com/v1:请求的资源上没有“Access-Control-Allow-Origin”标头。因此不允许原点'null'访问。如果有人有同样的问题。
1 - 必须启用Cors并且必须指定'Access-Control-Allow-Origin':'*'
这是默认情况。此设置可在AWS API网关设置中找到。
2 - Ajax调用应该包含头'Access-Control-Allow-Origin':'*'
。这是在html文件中。
$.ajax(
{
url: 'https://npvkf9jnqb.execute-api.us-east-1.amazonaws.com/v1',
headers: {'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*'
},
crossDomain: true,
type:'GET',
dataType: 'text',
success: function(data)
{
window.alert(data);
}
}); `
3 - Lambda函数还需要返回标头'Access-Control-Allow-Origin':'*'
。这应该在AWS Lambda中完成。
def lambda_handler(a, b):
return({
"isBase64Encoded": True,
"statusCode": 200,
"headers": { 'Access-Control-Allow-Origin': '*'},
"body": "blahhh"
})