我想在 Liftweb 框架中的 UI 中显示未来的响应。
以下是一个Loggable
片段方法(processRequest
),我目前正在使用它来响应未来对象到 UI ,但textarea
使用SetHtml
阻塞Thread.sleep
27 def render = {
45 def processRequest() : JsCmd = {
46
47 val future_ : LAFuture[String] = new LAFuture()
48
49 val urlRequest = url(request)
51 val future = Http(urlRequest OK as.String)
57
58 future onSuccess {
59 case json =>
60 resp = json
61 logger.info(s"[onSuccess] response => ${json}")
62 SetHtml("response", Text(resp+"")) //FIXME
63 logger.info(s"[onSuccess] response => ${json}") //works fine
64
65 }
66
67 future onFailure {
68 case exception =>
69 logger.info(s"${exception.getMessage()}")
70 }
71 Thread.sleep(2000) //TEMPORARY FIX
72 logger.info("[outside] response => ${resp}")
73 SetHtml("response", Text(resp)) //it works in blocking mode
74 }
77 "@requestid" #> text(requestid, s => requestid = s) &
78 "@request" #> text(request , s => request = s) &
79 "@response" #> textarea(responseString, s=>responseString = s) &
81 "@processreq" #> ajaxSubmit("Send Request", processRequest)
75 }
SetHtml
在里面不起作用onSuccess
,虽然我在那里得到了 json。SetHtml
有以下文档,
将节点的内容替换为提供的 id 和 content 给出的标记
这类似于在 Javascript 中为 DOM 对象的 innerHtml 属性分配一个新值。
我想要的SetHtml
是通过ajax处理请求本身的未来对象的解决方案。