【问题标题】:How to use ajax GET or POST method to pass data to Amazon lambda node.js function如何使用 ajax GET 或 POST 方法将数据传递给 Amazon lambda node.js 函数
【发布时间】:2016-02-09 23:28:41
【问题描述】:

我有下面的 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");
      }
});

当我运行它时它会提示错误。

【问题讨论】:

  • 是的,Suchit,这只是一个示例链接,在实际情况下,我使用的是我自己的 api url。谢谢
  • 您需要确保您的 url 没有给出任何与服务器相关的错误。
  • 你应该避免使用“name”作为变量名,因为它是一个javascript关键字。

标签: jquery node.js ajax amazon-web-services aws-lambda


【解决方案1】:

所以看起来您可能有几个问题。一、避免使用“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'。

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

您的 ajax 函数中的成功回调中的数据是从 lambda 函数返回的,因此我建议在 lambda 函数中对其进行 JSON.stringifying,而不是成功以确保它被正确发送:

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

【讨论】:

  • 非常感谢 Katharine Osborne~ 在我将“JSON.stringify(data)” 添加到我的代码后它就可以工作了~ 还有一件事,我想问我如何使用 GET 方法来做到这一点。 ..例如,我想在浏览器中访问“my-api-id.execute-api.region-id.amazonaws.com/test/…”以获得结果。我不知道如何配置 API 网关来做 GET 方法...谢谢你,对不起我的英语不好~
  • 我无法在评论中显示代码,但您需要创建一个使用 GET 的单独 lambda 函数。您的 ajax 调用不需要传入任何数据(因此您不需要 contentType、data 或 dataType,并且类型是 'GET'。也许可以在此处提出另一个问题并链接到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-27
  • 1970-01-01
  • 2015-02-02
  • 1970-01-01
  • 2019-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多