在ajax岗位的路线没有参考

时间:2013-08-10 10:56:58

标签: scalatra

当我将数据发布到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在发布数据时看不到任何参数?

1 个答案:

答案 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