1

私はajax+cometを使用して反復フォームを作成しています。送信すると、出力ファイルがダウンロードされます。

def render = ajaxForm(bind("form",/*...*/
  "submit" -> ajaxSubmit("Calculate",result _)))++hidden(result _)

private def result : JsCmd = {
  /* Some really time-consuming calculations */
  JsCmds.RedirectTo("/result/"+uniqueId)
}

ほとんどの場合に機能します。ただし、計算が非常に長く続くため、「サーバーが応答できませんでした」というメッセージが表示されます(エラーメッセージが表示されずにリダイレクトされない場合もあります)。

ajaxタイムアウトを再構成しようとしました:

LiftRules.ajaxPostTimeout = Int.MaxValue

しかし、それでもリダイレクトされていません。

また、リダイレクト部分を計算から切り離して、次のようなことを行うこともできます。

{val func = ajaxInvoke({() => JsCmds.RedirectTo("/result/"+uniqueId)})._2.cmd
Script(OnLoad(func))}

ただし、ページ全体のリロードだけでなく、reRenderでも機能するものにOnLoadを置き換える必要があります。または、クライアントを繰り返さずにページを強制的にリロードすることもできます。

4

1 に答える 1

2

LiftRules var ajaxPostTimeout = 5000 // m

于 2011-02-28T23:02:24.660 に答える