AWS API Gateway& Lambda - 没有从文本到application / json的转换

时间:2017-03-15 16:37:24

标签: amazon-web-services lambda aws-lambda aws-api-gateway

我创建了一个Lambda函数并添加了一个API网关触发器。添加触发器会创建一个API作为“Lambda代理”和“代理资源”。这很好,因为根据documentation代理资源“将Lambda函数的输出转换为HTTP响应”。但是,它返回200但调用我的ajax请求的错误函数。调试错误,我看到parsererrorNo conversion from text to application/json。我在API网关中缺少什么?我尝试将application/json => Empty添加到“方法响应”但不禁止。

这是我的Lambda函数返回的内容:

return {
    "statusCode": 200,
    "headers": {
        "Access-Control-Allow-Origin": "*",
        "Content-Type": "application/json"
    },
    "body": "Email added to system."
}

这是AJAX:

  var formData = $("#submitEmail").serializeArray();
  console.log(formData);

  $.ajax({
      url : "https://<REDACTED>.execute-api.us-east-1.amazonaws.com/prod/SubmitEmail",
      type: "POST",
      data : formData,
      dataType: "application/json",
      success: function(data, textStatus, xhr)
      {
          console.log("SUCCESS")
          console.log(xhr.status)
      },
      error: function (xhr, textStatus, errorThrown)
      {
          console.log("ERROR")
          console.log(xhr.status)
          console.log(textStatus)
          console.log(errorThrown)
      }
  });

1 个答案:

答案 0 :(得分:0)

我不太清楚如何解释这个,但我能够让它调用我的AJAX请求的成功函数。我认为数据类型不匹配。这就是我改变的内容。

修改了我的ajax请求:

  var formData = {
    email: $("#email").val()
  }

  dataType: "json"  (instead of "application/json")

Lambda函数:

return {
    "statusCode": 200,
    "headers": {
        "Access-Control-Allow-Origin": "*"
    },
    "body": json.dumps({
        "msg": "Email added to system."
    })
}

对于API网关,我没有列出&#34;响应标题为200&#34;和#34; 200&#34;的响应机构。