1

最近のほとんどすべてのブラウザーが、実際の AJAX 呼び出しの前にサーバーに対して OPTIONS 呼び出しを行っているため、AJAX 呼び出しを行う際に厄介な問題が発生しています。

私はPlayを使っているので!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 オブジェクトのonRouteRequestメソッドをオーバーライドすることです。次のバージョンのは、すべてのリクエストを という名前の単一のエンドポイントにルーティングします。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 に答える