在FunScript JS代码中使用来自F#host的类型通过Ajax

时间:2014-11-16 12:17:18

标签: f# funscript

如何使用在我的主机项目中声明的类型并在生成的FunScript代码中通过Ajax提供服务?

例如,我假设我声明了一个类型T,然后创建一个以该格式提供数据的REST端点。现在,如果我想加载数据并从FunScript中使用它,则不再输入T.


根据Alfanso的回答编辑解决方案:

假设类型“MyType”在基本F#项目中定义,并且匹配此类型的数据在localhost上提供:6543 / myData

let start () =
  async{  
    let url = "http://localhost:6543/myData"
    let req = System.Net.WebRequest.Create(url)
    let! data = req.AsyncGetJSON<MyType list>()
    Globals.window.alert( (sprintf "%A" data) )
  }
  |> Async.StartImmediate

我缺少的是

  • req.AsyncGetJSON
  • 使用Async.StartImmediate

1 个答案:

答案 0 :(得分:2)

您能否发布一些代码,以便更好地了解您正在尝试做什么?作为参考,您可以看到如何使用此little project中的FunScript.HTML扩展来交换类型安全的JSON值的示例。在这种情况下:

  • 使用具有CLIMutableSystem.Data.Linq.Mapping.Table属性的F#记录在服务器,客户端和数据库之间共享类型:Source
  • 对于服务器,我使用的是ASP.NET Web API,它透明地将类型作为JSON发送:Source
  • 在客户端中,我使用的是FunScript.HTML中的WebRequest.AsyncGetJSON<'T>扩展程序,它在后台只发出XMLHttpRequest,使用浏览器JSON.parse方法解析结果并使用unbox<'T>将对象“强制转换”为所需类型:hereherehere
如果您想在F#中以静态类型的方式使用动态类型,那么

unbox<'T>是您经常需要使用的小技巧。

我希望这有帮助!