当我将数据发布到Scalatra路线时,看不到任何参数。
在客户端:
$.ajax({
type: 'POST',
url: window.location.origin + '/move',
contentType: 'application/octet-stream; charset=utf-8',
data: {gameId: 1, from: from.toUpperCase(), to: to.toUpperCase()},
success: function(result) {
console.log('ok posting move', result);
},
error: function(e) {
console.log('error posting move', e);
}
});
在开发工具网络视图中:
Payload
gameId=1&from=B1&to=C3
在Scalatra路线:
params("gameId") // -> java.util.NoSuchElementException: key not found: gameId
但是,如果我通过删除数据字段并将网址设置为:
来更改ajax调用 type: 'POST',
url: window.location.origin + '/move?gameId=1&from=' +
from.toUpperCase() + '&to=' + to.toUpperCase(),
然后Scalatra可以看到params OK,即使把params放在帖子的查询字符串中似乎是错误的。
为什么Scalatra在发布数据时看不到任何参数?
答案 0 :(得分:1)
您需要使用application/x-www-form-urlencoded
作为内容类型:
script(type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js")
:javascript
$(function() {
$("#btn").click(function() {
$.ajax({
type: 'POST',
url: window.location.origin + '/form',
contentType: 'application/x-www-form-urlencoded; charset=utf-8',
data: {gameId: 1, from: "FROM", to: "TO"}
});
});
});
span#btn hello
在您的Scalatra应用程序中:
post("/form") {
val payload = for {
gameId <- params.getAs[Int]("gameId")
from <- params.getAs[String]("from")
to <- params.getAs[String]("to")
} yield (gameId, from, to)
payload
}
有关详细信息,请查看Servlet specification。