Как избежать ajax таймаутов на подъеме? - PullRequest
1 голос
/ 02 февраля 2011

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

1 Ответ

2 голосов
/ 01 марта 2011

LiftRules var ajaxPostTimeout = 5000 // m

...