Tôi muốn thực hiện một yêu cầu Ajax cơ bản, đó là tất cả.XhrRequest với phản xạ/phản xạ-dom
Tôi sử dụng reflex
cho giao diện người dùng và Scotty
cho chương trình phụ trợ. Bảng điều khiển Web của Firefox cho tôi biết yêu cầu đã thành công và tôi thấy kết quả mong đợi ở đó. Nhưng trang web chuyển đổi từ Just "default"
thành Nothing
thay vì Just "success!"
.
Dưới đây là hoàn chỉnh một ví dụ nhỏ:
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
và Scotty
phần:
{-# 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!"
Kể từ khi công cụ gỡ lỗi cho tôi biết yêu cầu là một thành công, tôi nghi ngờ lỗi ở đâu đó gần decodeXhrResponse
nhưng Tôi là một chút mất làm thế nào tôi nên tiến hành gỡ lỗi kể từ khi nó chỉ được biên dịch để (không đọc được) Javascript.
Tôi đã sử dụng tập lệnh Nix thử phản xạ từ GitHub để thiết lập mọi thứ và được biên dịch với ghcjs hello.hs
trong môi trường Nix.
Chỉnh sửa: Thêm đầu ra của curl
:
$ curl -G http://localhost:3000/mystring
success!%