1

在进行 AJAX 调用时遇到一些烦人的问题,仅仅是因为如今几乎每个浏览器都在实际 AJAX 调用之前对服务器进行了 OPTIONS 调用。

因为我正在使用 Play!2.0,是否有任何简单的方法可以使用 OPTIONS 方法对任何路由进行通配符响应?

例如,在我的路线中执行以下操作: OPTIONS /* controllers.Options.responseDef

的,我知道新的 Play!没有内置通配符,但需要有一个解决方案,因为所有浏览器都越来越多地在 AJAX 调用之前调用 OPTIONS。

4

2 回答 2

2

不完全是通配符,但您可以使用route跨越多个斜杠段的 a:

OPTIONS   /*wholepath     controllers.Options.responseDef(wholepath)
OPTIONS   /               controllers.Options.responseDef

它应该匹配所有请求:

OPTIONS    /a
OPTIONS    /a/b
OPTIONS    /a/b/c

注意:那是我的想法,所以也许你需要润色一下。我现在不能自己检查。

检查手册的“跨越多个/的动态部件”部分。

于 2012-06-29T07:47:40.230 回答
1

让单个控制器端点匹配所有 OPTIONS 请求的一种非常简洁的方法是覆盖Play 的 Global objectonRouteRequest的方法。以下版本将所有请求路由到一个名为.onRouteRequestOptionsController.options

import play.api.mvc._

...

override def onRouteRequest(request: RequestHeader): Option[Handler] = {
  request.method match {
    case "OPTIONS" => Some(OptionsController.options)
    case _ => super.onRouteRequest(request)
  }
}
于 2015-02-20T17:31:46.757 回答