我仍然是RESTful api和JSON的新手,所以我尝试查看jQuery和Play的文档,以便将JSON发送到URI并从请求体解析JSON。
不幸的是,我得到了一些意想不到的行为。
这是我的AJAX调用:$.ajax({
url: "@routes.Application.downloadResults",
data: {
uuid: $('body').attr('uuid')
},
dataType: 'json',
contentType: "application/json; charset=utf-8",
success: function(res) {
console.log('success')
},
error: function(res) {
console.log('error')
}
})
这是我的服务器代码:
def downloadResults = Action { request =>
Logger.info("Attempting to download")
Logger.info(request.toString)
Logger.info(request.body.toString)
Logger.info(request.body.asJson.toString)
request.body.asJson.map { json =>
{
Logger.info(json.toString)
json.validate[String].map {
case uuid => {
Logger.info(s"Looking for results-$uuid.txt")
Ok.sendFile(new File(s"results-$uuid.txt"))
}
}.recoverTotal {
e =>
{
Logger.info("Detected error: " + JsError.toFlatJson(e))
BadRequest("Detected error: " + JsError.toFlatJson(e))
}
}
}
}.getOrElse {
Logger.info("Expecting Json data")
BadRequest("Expecting Json data")
}
}
结果是服务器日志:
[info] application - Attempting to download
[info] application - GET /download?uuid=12512502-5ca4-47bc-a4db-15f1da1979fc
[info] application - AnyContentAsEmpty
[info] application - None
[info] application - Expecting Json data
下面是生成的浏览器控制台:
GET http://localhost:9000/download?uuid=12512502-5ca4-47bc-a4db-15f1da1979fc 400 (Bad Request) jquery-1.9.0.min.js:3
error
看起来uuid
被附加到URI作为参数,但我试图将其作为JSON发送。我想现在用哪种方式实现并不重要,但我正在努力加深对使用JSON进行客户机-服务器通信的理解。我试着调用JSON数据上的Json.stringify
,但这只是导致GET /download?{%22uuid%22:%224de4c3dd-24db-49dc-8f9e-4d3e0d90dea5%22}
在我的服务器日志。
关于如何做到这一点有什么建议吗?
使用$.ajax()
时,JQuery默认使用GET方法。这就是为什么你的内容被附加到URL。
您应该尝试将type: "POST"
添加到您的$.ajax
呼叫中。这将告诉jQuery在请求正文中发送数据,而不是在URL中。
同时,确保你的路由在你的routes
配置文件中用POST方法声明。