Haskell 带反射/反射dom的XhrRequest
我想执行一个基本的Ajax请求,仅此而已 我对前端使用Haskell 带反射/反射dom的XhrRequest,haskell,ghcjs,reflex,Haskell,Ghcjs,Reflex,我想执行一个基本的Ajax请求,仅此而已 我对前端使用reflection,对后端使用Scotty。Firefox Web控制台告诉我请求成功了,我在那里看到了预期的结果。但是该网站从仅“默认”切换到无,而不是仅“成功!” 下面是一个完整的最小示例: import Reflex (holdDyn) import Reflex.Dom (button, el, mainWidget, display) import Reflex.Dom.Xhr (performRequestAsync, xhrR
reflection
,对后端使用Scotty
。Firefox Web控制台告诉我请求成功了,我在那里看到了预期的结果。但是该网站从仅“默认”
切换到无
,而不是仅“成功!”
下面是一个完整的最小示例:
import Reflex (holdDyn)
import Reflex.Dom (button, el, mainWidget, display)
import Reflex.Dom.Xhr (performRequestAsync, xhrRequest, decodeXhrResponse)
import Reflex.Class (tag, constant)
import Data.Default (def)
main :: IO ()
main = do
mainWidget $ el "div" $ do
buttonEvent <- button "click me"
let defaultReq = xhrRequest "GET" "mystring" def --served by Scotty
asyncEvent <- performRequestAsync (tag (constant defaultReq) buttonEvent)
buttonDyn <- holdDyn (Just "default") $ fmap decodeXhrResponse asyncEvent
display buttonDyn
由于调试工具告诉我请求成功,我怀疑在decodeXhrResponse
附近的某个地方出现了错误,但我有点不知道应该如何进行调试,因为它刚刚被编译成(不可读的)Javascript
我使用GitHub中的try reflect Nix脚本设置所有内容,并在Nix环境中使用ghcjs hello.hs
进行编译
编辑:添加curl
的输出:
$ curl -G http://localhost:3000/mystring
success!%
在freenode上的#reflection frp
的帮助下,我找到了一个解决方案:将decodexhresponse
替换为\uxhrresponse\uBody
,并对默认字符串使用Text
:
buttonDyn <- holdDyn (Just $ T.pack "default") $ fmap _xhrResponse_body asyncEvent
buttonDyn我编写了这个简化的helper函数,基本上是从Reflection检索远程URL:
curlGet :: MonadWidget t m => Text -> m (Event t Text)
curlGet url = do
let req = xhrRequest "GET" url def
pb <- getPostBuild
asyncReq <- performRequestAsync (tag (constant req) pb)
pure $ fmap (fromMaybe "Unknown error" . _xhrResponse_responseText) asyncReq
curlGet::MonadWidget t m=>Text->m(事件t Text)
curlGet url=do
让req=xhrRequest“GET”url def
PB
curlGet :: MonadWidget t m => Text -> m (Event t Text)
curlGet url = do
let req = xhrRequest "GET" url def
pb <- getPostBuild
asyncReq <- performRequestAsync (tag (constant req) pb)
pure $ fmap (fromMaybe "Unknown error" . _xhrResponse_responseText) asyncReq