2015-11-06 52 views
2

我似乎遇到了Amazon Gateway API不喜欢我发送的参数的问题。带有Lambda的Amazon Gateway API - 无法将请求正文解析为json

$.ajax({ 
     url: "https://tibqwxuqoh.execute-api.us-east-1.amazonaws.com/dev/getitems", 
     type: "POST", 
     data: { 
      "device": "test", 
      "datetime": "1446757400919" 
     }, 
     success: function (returnhtml) { 
      console.log(returnhtml); 
      $("#result").append("DOES NOT WORK - <br>" + JSON.stringify(returnhtml)); 
     } 
    }); 

    $.ajax({ 
     url: "https://tibqwxuqoh.execute-api.us-east-1.amazonaws.com/dev/getitems", 
     type: "POST", 
     data: {}, 
     success: function (returnhtml) { 
      console.log(returnhtml); 
      $("#result").append("<br>WORKS ???? - <br>" + JSON.stringify(returnhtml)); 
     } 
    }); 

这是一个工作示例。 http://jsfiddle.net/Uwcuz/4315/

有人可以让我知道为什么它不会让我发送参数,每次我添加一个参数,我得到这个错误。

{ 
    Type = User; 
    message = "Could not parse request body into json."; 
} 

确定这个工作,但似乎对我有点痛苦。

$.ajax({ 
     url: "https://tibqwxuqoh.execute-api.us-east-1.amazonaws.com/dev/getitems", 
     type: "POST", 
     data: "{\"device\": \"test\",\"datetime\": \"1446757444524\"}", 
     success: function (returnhtml) { 
      console.log(returnhtml); 
      $("#result").append("WORKS - <br>" + JSON.stringify(returnhtml)); 
     } 
    }); 

回答

6

问题在于如何将数据发送到API网关。 不知道你的API配置的细节我猜你有一个应用程序/ JSON的请求映射设置。 jQuery将默认将您的数据发布为application/x-www-form-urlencoded,但您希望将其作为json发送。

你可以做到这一点,而无需摆弄太多的数据自己:

var requestParams = { 
    url: "https://tibqwxuqoh.execute-api.us-east-1.amazonaws.com/dev/getitems", 
    method: "POST, 
    contentType: "application/json", 
    dataType: "json", 
    data: JSON.stringify({ 
     "device": "test", 
     "datetime": "1446757400919" 
    }); 
}; 
var request = $.ajax(requestParams); 

这里的关键是JSON.stringify(),并告诉jQuery的该数据类型是JSON以及设置的contentType到应用程序/ JSON。