如何使用 ajax GET 或 POST 方法将数据传递给 Amazon lambda node.js 函数

How to use ajax GET or POST method to pass data to Amazon lambda node.js function

我有下面的 node.js 代码(在 Getting Started with REST APIs in Amazon API Gateway 之后):

console.log('Loading event');

exports.handler = function(event, context) {
var name = (event.name === undefined ? 'No-Name' : event.name);
context.done(null, {"Hello":name}); // SUCCESS with message
};

但我不知道如何使用 jQuery ajax 方法将 "name" 参数传递给该代码。它在我使用时有效:

curl -H "Content-Type: application/json" -X POST -d "{\"name\": \"PeterChan\"}" https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource

我可以得到结果:

{"Hello":"User"}

但是如何使用 jQuery ajax 方法来传递 "name" 变量?

我写的ajax代码:

var data = {"name":"bbbb"};

 $.ajax({
      type: "POST",
      dataType: "json",
      url:"https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource",
      data: data,
      //processData: false,
      success: function(data) {
            var text=JSON.stringify(data);
            alert(text);
            //console.log(data);

      },error: function(data) {
            alert("err");
      }
});

它在我 运行 时提示错误。

看来您可能遇到了一些问题。第一,避免使用 "name" 作为变量名。第二,数据可能没有被正确解析。发送时需要JSON.Stringify(是的,你已经有JSON,但它很挑剔):

$.ajax({
    url: 'https://mylambdafunctionurl/',
    type: 'POST',
    crossDomain: true,
    contentType: 'application/json',
    data: JSON.stringify(data),
    dataType: 'json',
    success: function(data) {
        //success stuff. data here is the response, not your original data
    },
    error: function(xhr, ajaxOptions, thrownError) {
        //error handling stuff
    }
});

我还添加了 crossDomain:true 和 contentType:'application/json'。

在 lambda 函数中获取传入的 JSON 中的 key/value 您只需使用 event.whateverkey(在 Lambda 控制台中使用测试事件时,使键与您匹配正在发送以避免任何问题)。

ajax 函数中的成功回调中的数据是从 lambda 函数返回的数据,所以我建议 JSON.stringifying 在 lambda 函数中,而不是成功以确保它正确发送:

context.done(null, JSON.stringify({"Hello":name}));