Ajax使用jQuery调用Python中的AWS lambda函数

问题描述 投票:0回答:2

我正试图绕过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部分。我错过了什么?欢迎任何帮助,因为我是一个完全的初学者!

javascript jquery ajax amazon-web-services aws-lambda
2个回答
1
投票

type: 'POST'之后你错过了一个逗号

$.ajax(
    {
    url: 'https://npvkf9jnqb.execute-api.us-east-1.amazonaws.com/v1',
    type:'POST',
    dataType: 'text',
    success: function(data) {
        window.alert(data);
    }
});

1
投票

我将总结我在错误的步骤中找到的解决方案:

无法加载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"
    })
© www.soinside.com 2019 - 2024. All rights reserved.