我正在使用 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))}
但是我需要将 OnLoad 替换为适用于 reRender 的东西,而不仅仅是在整页重新加载时。或者也许以某种方式强制我的页面在没有客户端迭代的情况下重新加载。