简体   繁体   English

F#MVC Json结果,在Ajax调用之后在客户端空对象上

[英]F# MVC Json Result, on the client empty object after Ajax call

I have a F# mvc app, and I am trying to get ajax call into and endpoint that will return a list of people, which will then display in a table. 我有一个F#mvc应用程序,并且尝试将ajax调用输入到end并返回一个人列表,然后将其显示在表中。

type Person(credits:int, name:string, serverDateTime:DateTime ) = class end

type PeopleMeta(  persons:ResizeArray<Person> ) = 
    member t.size() = 1

[<HttpGet>]
member this.getPeopleMeta()=
    let person1 = Person(1,"A",DateTime.Now)
    let person2 = Person(2,"B",DateTime.Now)
    let persons = new ResizeArray<Person>()
    persons.Add(person1);
    persons.Add(person2);
    let peopleMeta = PeopleMeta( persons )
    this.Json( peopleMeta , JsonRequestBehavior.AllowGet ) 

On the Html/JavaScript I have this... 在HTML / JavaScript上,我有这个...

    <script src="/knockout-2.2.0.js"></script>
    <script src="knockout.mapping.js"></script>


<body>

<div id="contentViewModelAjax">
    <div>
        <div data-bind="template: { name: 'personAjax-template', foreach: people }">
        </div>
    </div>
</div>
<script type="text/html" id="personAjax-template">
    <span data-bind="text: name"></span> 
    <span data-bind="text: credits"></span> 
    <span data-bind="text: serverDateTime"></span> 
    <br />
</script>
<script>
    $(document).ready(function () {
        execPageViewModel();
    });
    var execPageViewModel = function () {
        function PeopleViewModel(config) {
            var self = this;
            self.config = config;
            self.people = ko.observableArray([]);
            self.getPeople = function () {
                var url = "getPeopleMeta";
                var jqXhr = $.ajax({ url: url, type: 'GET', cache: false, 'data':self.config });
                jqXhr.done(function (data) {
                    console.log(data);
                    console.log(data.persons);
                    self.people(data.persons);
                    ko.applyBindings(self, document.getElementById(self.elementId));
                });
                setTimeout(self.getPeople, 5000);
            };
            self.exec = function () {
                self.getPeople();
            };
        };
        var viewModelConfig = {'elementId':'contentViewModelAjax','PersonId':1};
        var peopleViewModel = new PeopleViewModel(viewModelConfig);
        peopleViewModel.exec();
    };
</script>

The console.log data is {} and data.persons is undefined. console.log数据为{},而data.persons未定义。 Any ideas ? 有任何想法吗 ?

This new code got me result I was looking for 这段新代码为我寻找的结果

type Person() = 
    let mutable _credits = 0
    let mutable _name  = ""
    let mutable _serverDateTime = ""
    member x.credits with get() = _credits and set v = _credits <- v
    member x.name with get() = _name and set v = _name <- v
    member x.serverDateTime with get() = _serverDateTime and set v = _serverDateTime <- v

type PeopleMeta() = 
    let mutable _persons:ResizeArray<Person>  = new ResizeArray<Person>() 
    member x.persons with get() = _persons and set v = _persons <- v





 [<HttpGet>]
    member this.getPeopleMeta()=
        let person1 = Person()
        person1.credits <-2 
        person1.name  <- Guid.NewGuid().ToString().Substring(1,5) 
        person1.serverDateTime  <- DateTime.Now.ToString()
        let persons = new ResizeArray<Person>()
        persons.Add(person1);
        let peopleMeta = PeopleMeta(  )
        peopleMeta.persons <- persons 
        this.Json( peopleMeta , JsonRequestBehavior.AllowGet ) 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM