Haskell 带反射/反射dom的XhrRequest

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

我想执行一个基本的Ajax请求,仅此而已

我对前端使用
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