这个问题可能是由于CORS(跨源资源共享)设置不正确导致的。解决方法是设置API Gateway的CORS选项。
以下是一个为API Gateway启用CORS的示例代码:
exports.handler = function(event, context, callback) { var response = { statusCode: 200, headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "Content-Type", "Access-Control-Allow-Methods": "OPTIONS,POST" } }; callback(null, response); };
在API Gateway中,需要将响应模板设置为“application/json”,并添加以下模板:
#set($allowMethods = "OPTIONS,POST") #set($allowHeaders = "Content-Type") #set($allowOrigin = "*") #set($statusCode = $input.path('$.statusCode')) #set($errorMessage = $input.path('$.errorMessage')) #set($statusMessage = $input.path('$.statusMessage'))
#if($errorMessage) { "statusCode": $statusCode, "headers": { "Access-Control-Allow-Origin": "$allowOrigin", "Access-Control-Allow-Headers": "$allowHeaders", "Access-Control-Allow-Methods": "$allowMethods", "Content-Type": "application/json" }, "body": "{"message": "$errorMessage"}" } #else { "statusCode": $statusCode, "headers": { "Access-Control-Allow-Origin": "$allowOrigin", "Access-Control-Allow-Headers": "$allowHeaders", "Access-Control-Allow-Methods": "$allowMethods", "Content-Type": "application/json" }, "body": $input.json('$') } #end
使用这些代码,API Gateway将启用CORS,并在XMLHttpRequest中工作。