Desidero eseguire una richiesta Ajax di base, tutto qui.XhrRequest con reflex/reflex-dom
Io uso reflex
per il frontend e Scotty
per il backend. La Web Console di Firefox mi dice che la richiesta è stata un successo e vedo i risultati attesi lì. Tuttavia, il sito Web passa da Just "default"
a Nothing
anziché a Just "success!"
.
Ecco un completo esempio minimo:
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
e la Scotty
parte:
{-# 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!"
Poiché gli strumenti di debug mi dicono la richiesta è stata un successo, ho il sospetto che l'errore da qualche parte vicino decodeXhrResponse
ma Sono un po 'perso come dovrei procedere con il debug poiché viene appena compilato per Javascript (illeggibile).
Ho utilizzato lo script try-reflex Nix di GitHub per configurare tutto e compilato con ghcjs hello.hs
nell'ambiente Nix.
Edit: Aggiunta l'uscita del curl
:
$ curl -G http://localhost:3000/mystring
success!%