我正在使用 AWS API Gateway。我想将数据发布到驻留在服务器目录中的控制器。我创建了一个具有开发资源和 POST 方法的 API。我还添加了 OPTIONS 方法来添加标题。
我正在使用 ajax 将请求数据发送到控制器。数据始终为空。控制器在 CakePHP 中
我正在调用的函数是
function webservice() {
if(empty($this->data['username'])){
echo json_encode("Data is Empty");
}
else{
$username = $this->data['username'];
$password = $this->data['password'];
$deviceType = $this->data['deviceType'];
$token = $this->data['token'];
$conditions= array('username' => $username,
'password' => $password,
'token' => $token,
'deviceType' => $deviceType
);
echo json_encode($conditions);
}
exit();
}
Ajax 调用是 :
var username = "dummydata";
var password = "dummydata";
var deviceType = "dummydata"
var token = "dummydata";
alert(username + password + token);
$.ajax(
{
type : "POST",
url : "https://xxxxxxxxxx.execute-api.ap-southeast-1.amazonaws.com/dev/webserv",
data: "{username : username, password: password, token: token, deviceType: deviceType}",
success : function(result){
alert((result));
}
});
如何使用 AWS API 网关在控制器中从 AJAX 接收已发布的数据?
首先,您需要提供到 API 网关的映射模板,以允许它将请求数据映射到您的 Lambda 函数调用。其次,请注意在映射模板上设置的"内容类型",并在 AJAX 调用中设置相同的内容类型,以便触发该模板的使用。
例如,如果在 API Gateway 中将内容类型设置为"application/json",则可以在 jQuery AJAX 调用上设置此属性:contentType: "application/json"
,我发现最简单的方法是使用始终映射传入请求中所有内容的模板。我使用这个模板,取自这个答案:
{
"method": "$context.httpMethod",
"body" : $input.json('$'),
"headers": {
#foreach($param in $input.params().header.keySet())
"$param": "$util.escapeJavaScript($input.params().header.get($param))" #if($foreach.hasNext),#end
#end
},
"queryParams": {
#foreach($param in $input.params().querystring.keySet())
"$param": "$util.escapeJavaScript($input.params().querystring.get($param))" #if($foreach.hasNext),#end
#end
},
"pathParams": {
#foreach($param in $input.params().path.keySet())
"$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end
#end
}
}