基本的な Ajax リクエストを実行したいだけです。
reflexフロントエンドとバックエンドに使用しScottyます。Firefox Web コンソールに、リクエストが成功したことが示され、期待どおりの結果が表示されます。Just "default"しかし、ウェブサイトはからNothingではなく に切り替わりますJust "success!"。
完全な最小限の例を次に示します。
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
そしてそのScotty部分:
{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty
import Network.Wai.Middleware.Static
main = scotty 3000 $ do
middleware $ staticPolicy (noDots >-> addBase "/mnt/b/haskell/try-reflex/hello.jsexe")
get "/" $ do
file "/mnt/b/haskell/try-reflex/hello.jsexe/index.html"
get "/mystring" $ html "success!"
デバッグツールはリクエストが成功したことを教えてくれるので、どこかにエラーdecodeXhrResponseがあるのではないかと思いますが、(読み取り不能な) Javascript にコンパイルされるだけなので、デバッグをどのように進めるべきか少し迷っています。
GitHub の try-reflex Nix スクリプトを使用してすべてをセットアップしghcjs hello.hs、Nix 環境でコンパイルしました。
編集:の出力を追加curl:
$ curl -G http://localhost:3000/mystring
success!%