我创建了一个Lambda函数并添加了一个API网关触发器。添加触发器会创建一个API作为“Lambda代理”和“代理资源”。这很好,因为根据documentation代理资源“将Lambda函数的输出转换为HTTP响应”。但是,它返回200
但调用我的ajax请求的错误函数。调试错误,我看到parsererror
和No 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)
}
});
答案 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;的响应机构。