关于淘汰赛的问题

时间:2012-08-01 04:25:43

标签: asp.net vb.net json knockout.js

1.我在asp.net上有2个关于淘汰赛的问题。
服务器端方法:

<WebMethod>
Public Shared Function foo() As List(Of person)
    Return New List(Of person)() From {New person With {.id = 1, .fname = "meysam"},
                                         New person With {.id = 2, .fname = "yasaman"}}.ToList
End Function

json和绑定到淘汰赛:

var VM = {};
$.getJSON("default.aspx/foo", function (data) {
    var tmp = JSON.stringify(data.d);
    VM.model =  
    ko.applyBindings(VM);
});

HTML:

<div data-bind="foreach: model">
<h3 data-bind="text: id">
</h3>
<p>
    Name: <span data-bind="text: fname"></span>
</p>

但是当我在浏览器中运行时。没有任何事情会发生。fname,id将会显示。

2.what $.getJSON dataType:json 之间的区别

 $.getJSON("default.aspx/foo", function (data) {
    var tmp = JSON.stringify(data.d);
});

$.ajax({
type:"post",
url:"default.aspx/foo",
contentType:"application/json;charset=utf-8",
dataType:"json",
success:function(data){}
})

先谢谢,抱歉我的英语不好。

2 个答案:

答案 0 :(得分:1)

所以,这应该是两个实际的问题,但是anywho(反向顺序!):

2:来自jQuery documentation$.getJSON是一个简写的Ajax函数,相当于:

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

所以他们是一样的。

1:您尝试拨打JSON.stringify()来自getJSON电话的结果是多余的。 getJSON已经这样做了。问题是双重的:这些解析器都不能解析.net列表(我可能错了,但我有60%肯定)。在任何一种情况下,更好的解决方案是在Web方法中将列表序列化为JSON,并返回已解析的JSON。 .NET有this ability built-in

二,您的列表没有d属性。因此,即使你对那部分进行排序,你也会得到一个未定义的错误。

答案 1 :(得分:0)

关于你的淘汰赛问题:

以下是解决问题的代码:

输出

enter image description here

ASPX代码背后

    [WebMethod]
    public static IEnumerable<KnoPerson> GetPeople()
    {
        return Builder<KnoPerson>.CreateListOfSize(10).Build();
    }

public class KnoPerson
{
    public int ID { get; set; }
    public int FirstName { get; set; }
}

ASPX

<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="Scripts/knockout-2.1.0.js"></script>
<script type="text/javascript" src="Scripts/knockout.mapping-latest.js"></script>
<script type="text/javascript">
    $(function () {
        var model = {};
        $.ajax({
            url: "KnockoutBindingFromPageMethod.aspx/GetPeople",
            data: null,
            type: "POST",
            dataType: "json",
            contentType: "application/json",
            cache: false,
            async: false,
            success: function (myData) {
                model.people = ko.mapping.fromJS(myData.d);
                model.yo = ko.observable("plop");
                ko.applyBindings(model);
            },
            error: function (xhr) {
                alert(xhr.responseText);
            }
        });
    });
</script>

    <div data-bind="text: yo"></div>
    <div data-bind="foreach: people">
        <h3 data-bind="text: ID"></h3>
        <p>
            Name: <span data-bind="text: FirstName"></span>
        </p>
    </div>

  

2.what $ .getJSON和dataType:json?

之间的区别

.getJSON是一种快捷方式,内部使用.ajax

.getJSON函数设置以下属性:

  • dataType: “json”

  • type: "GET"