2015-05-15 12 views
7

Temel bir Ajax isteği gerçekleştirmek istiyorum, hepsi bu.Refleks/refleksli XhrRequest

Ön uç için reflex ve arka uç için Scotty kullanıyorum. Firefox Web Konsolu bana isteğin başarılı olduğunu ve beklenen sonucu görebileceğimi söylüyor. Ancak web sitesi Just "default"'dan Just "success!" yerine Nothing'a geçer.

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 

ve Scotty kısmı:: İşte

tam minimal örnektir ayıklama araçları yerde decodeXhrResponse yakın hatayı şüpheli istek başarılı oldu söyle yana

{-# 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!" 

ama Ben sadece (okunmaz) Javascript derlenmiş beri hata ayıklama devam etmeliyim biraz kayboldum.

Her şeyi kurmak ve Nix ortamında ghcjs hello.hs ile derlenmiş olan TryHub denen Nix komut dizisini kullandım.

Düzenleme: curl çıktısını ekleme: _xhrResponse_body ile decodeXhrResponse değiştirilmesi ve varsayılan dize için Text kullanarak çalıştı: freenode #reflex-frp itibaren

$ curl -G http://localhost:3000/mystring 
success!% 

cevap

6

yardımıyla ben bir çözüm buldum

buttonDyn <- holdDyn (Just $ T.pack "default") $ fmap _xhrResponse_body asyncEvent 

decodeXhrResponse bir çeşit JSON bekler ve bir noktada Scotty üzerinden JSON hizmet etmeye çalışmış olmasına rağmen hala işe yaramadı.