Я использую комету ajax + для создания итерационной формы. Когда он передается, загружается выходной файл.
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, а не только на полную перезагрузку страницы. Или, может быть, заставить мою страницу перезагрузиться без итераций клиента.