无法通过淘汰赛获得json对象

我不能得到json对象。

我的目标是:

public class Person { public string firstName { get; set; } public string lastName { get; set; } } 

PersonsControll:

  public ActionResult Index() { return View(); } // GET: /Persons/GetPerson //[AcceptVerbs(HttpVerbs.Get)] //[OutputCache(Duration = 0, VaryByParam = "*")] public JsonResult GetPerson() { Person p = new Person { firstName = "Jonas", lastName = "Antanaitis" }; return Json(p, JsonRequestBehavior.AllowGet); } 

我的索引视图:

 @Scripts.Render("~/bundles/knockout") 

First name:

Last name:

var data = $.getJSON(".../GetPerson", function (result) { //state = result.readyState; firstName: result.firsName; lastName: result.lastName; }) .error(function () { alert("error"); }); function viewModel() { ko.mapping.fromJS(data); //state = data.readyState; //firstName = data.firstName; //lastName = data.lastName; }; document.write(JSON.stringify(data)); //this line prints "{"readyState":1}" ko.applyBindings(new viewModel());

当我在浏览器中转到“… / GetPerson”时,我显示: {“firstName”:“Jonas”,“lastName”:“Antanaitis”}

,但是当试图获取数据时,javascript视图 – 我不会得到这些数据。

我做错了什么,为什么我不能得到数据? 评论代码的地方 – 我试过这种方法..但没有任何帮助。

我试过了:

 *$.ajax({ type: "GET", cache: false, url: ".../GetPerson", }).done(function (msg) { alert("Data Saved: " + msg.readyState + " " + msg.firstName + " " + msg.lastName); });* 

然后警告框显示:“ 数据已保存:未定义Jonas Antanaitis

你正在混合异步代码和同步代码…你在这里有这一行

 var data = $.getJSON(".../GetPerson", function (result) { 

data实际上是一个承诺(这是ajax返回的)。 在回调执行之前,您实际上并没有数据 – 即结果是具有ACTUAL数据的东西。

您需要将绑定移动到INSIDE回调或使用您在事后设置的observable:

1)在回调示例中

  

2)使用可观察的

  

相应的html(带有绑定使它比if更干净):

  

First name:

Last name:

第二种方法的优点是您可以快速绑定所有内容……然后可以显示您的数据。