Impossible d’obtenir l’object json avec knock-out

Je ne peux pas obtenir d’object Json.

Mon object est:

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

PersonnesControll:

  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); } 

Ma vue d’index:

 @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.ssortingngify(data)); //this line prints "{"readyState":1}" ko.applyBindings(new viewModel());

Lorsque je clique sur “… / GetPerson” dans le navigateur, le message suivant s’affiche: {“firstName”: “Jonas”, “lastName”: “Antanaitis”}

, mais lorsque vous essayez d’obtenir des données en javascript – je n’obtiens pas ces données.

Qu’est-ce que je fais mal, pourquoi je ne peux pas obtenir de données? Où le code commenté – j’ai essayé cette approche .. mais rien n’a aidé.

J’ai essayé:

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

La boîte d’alerte affiche ensuite: ” Données enregistrées: Jonas Antanaitis non défini

Vous mélangez du code asynchrone avec du code de synchronisation … Vous avez cette ligne ici

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

data seront en fait une promesse (c’est ce que retourne ajax). En réalité, vous ne disposez pas des données tant que le rappel n’a pas été exécuté – le résultat correspond à l’élément contenant les données ACTUAL.

Vous devez déplacer la liaison dans INSIDE the callback OU utiliser un observable que vous définissez après coup:

1) Dans l’exemple de rappel

  

2) Utilisez un observable

  

Et le html correspondant (la liaison avec le rend un peu plus propre que si):

  

First name:

Last name:

L’avantage de la deuxième méthode est que vous liez tout rapidement … et que vous pouvez ensuite afficher vos données dès leur arrivée.