【问题标题】:Questions about knockout关于淘汰赛的问题
【发布时间】:2012-07-29 22:53:48
【问题描述】:

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

<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.$.getJSONdataType: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){}
})

【问题讨论】:

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


    【解决方案1】:

    所以,这确实应该是两个实际问题,但是任何人(以相反的顺序!):

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

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

    所以它们是一样的。

    1:您尝试在getJSON 调用的结果上调用JSON.stringify() 是多余的。 getJSON 已经这样做了。问题有两个方面:这些解析器都不能解析 .net 列表(我可能对此有误,但我有 60% 的把握)。无论哪种情况,更好的解决方案是在 web 方法中将列表序列化为 JSON,并返回已解析的 JSON。 .NET 有this ability built-in

    第二,您的列表没有d 属性。所以即使你把那部分整理出来,你也会得到一个未定义的错误。

    【讨论】:

      【解决方案2】:

      关于你的淘汰赛问题:

      以下代码可解决您的问题:

      输出

      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.$.getJSON和dataType:json有什么区别?

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

      .getJSON 函数设置以下属性:

      • dataType: “json”

      • type: "GET"

      【讨论】:

        猜你喜欢
        • 2015-03-30
        • 2014-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-23
        相关资源
        最近更新 更多