Ajax-вызов с использованием jQuery для лямбда-функции AWS в Python - PullRequest
0 голосов
/ 06 октября 2018


Я пытаюсь разобраться с вызовами ajax и aws lambda, но я часами боролся с самым простым примером, который только мог придумать: просто чтобы javascript / jquery выполнял вызов ajax длялямбда, пусть лямбда возвращает текст «бла», а затем распечатывает его в виде предупреждения в моем браузере.

Пожалуйста, помогите!

Я создал лямбда-функцию с сообщением, которое, кажется, работает (когда я захожу на URL-адрес в моем браузере, я вижу в своем браузере бла):

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 с той же конфигурацией) с типом интеграции лямбда-функция, используя лямбда-интеграцию, в регионе с востоком 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 в своем браузере, похоже, он не работаетАякс часть.Что мне не хватает?Любая помощь приветствуется, так как я начинающий в этом!

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Я суммирую решение, которое я нашел в трех шагах для ошибки:

Не удалось загрузить https://npvkf9jnqb.execute -api.us-east-1.amazonaws.com / v1 : На запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».Происхождение 'null', следовательно, запрещенов случае, если у кого-то есть такая же проблема.

1 - Cors должен быть включен, и необходимо указать 'Access-Control-Allow-Origin':'*' Это по умолчанию.Этот параметр можно найти в настройках AWS API Gateway.

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 - Лямбда-функция также должна возвращать заголовок 'Access-Control-Allow-Origin':'*'.Это должно быть сделано в AWS Lambda.

def lambda_handler(a, b):
    return({
    "isBase64Encoded": True,
    "statusCode": 200,
    "headers": { 'Access-Control-Allow-Origin': '*'},
    "body": "blahhh"
    })
0 голосов
/ 06 октября 2018

Вы пропустили запятую после type: 'POST'

$.ajax(
    {
    url: 'https://npvkf9jnqb.execute-api.us-east-1.amazonaws.com/v1',
    type:'POST',
    dataType: 'text',
    success: function(data) {
        window.alert(data);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...