在 FunScript JS 代码中使用来自 F# 主机的 type via Ajax



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

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


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

假设类型"MyType"是在基本 F# 项目中定义的,并且与本地主机上提供的此类型匹配的数据: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

我错过的是

  • 要求。AsyncGetJSON
  • 使用 Async.StartImmediate

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

  • 使用具有CLIMutableSystem.Data.Linq.Mapping.Table属性的 F# 记录在服务器、客户端和数据库之间共享类型:源
  • 对于服务器,我正在使用 ASP.NET Web API,它透明地将类型作为 JSON 发送:
  • 在客户端中,我使用的是 FunScript.HTML 的 WebRequest.AsyncGetJSON<'T> 扩展,它在后台只是发出一个XMLHttpRequest,使用浏览器JSON.parse方法解析结果,并使用unbox<'T>将对象"投射"为所需的类型:这里、这里和这里。

如果要在 F# 中以静态类型方式使用动态类型,unbox<'T>是经常必须使用的小技巧。

我希望这有帮助!

相关内容

最新更新