Ich möchte eine grundlegende Ajax-Anfrage durchführen, das ist alles.XhrRequest mit reflex/reflex-dom
Ich verwende reflex
für das Frontend und Scotty
für das Backend. Die Firefox Web Console teilt mir mit, dass die Anfrage erfolgreich war und ich sehe das erwartete Ergebnis dort. Aber die Website wechselt von Just "default"
zu Nothing
statt Just "success!"
.
Dies ist die komplette minimal Beispiel:
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
und der Scotty
Teil:
{-# 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!"
Da die Debug-Tools mir sagen, die Anfrage war ein Erfolg, ich den Fehler vermuten, irgendwo in der Nähe von decodeXhrResponse
aber Ich bin ein wenig verloren, wie ich mit dem Debugging fortfahren sollte, da es nur zu (unlesbarem) Javascript kompiliert wird.
Ich habe das Try-Reflex Nix-Skript von GitHub verwendet, um alles einzurichten und kompiliert mit ghcjs hello.hs
in der Nix-Umgebung.
Edit: die Ausgabe von curl
Hinzufügen:
$ curl -G http://localhost:3000/mystring
success!%