데이터 바인딩을 위해 KnockoutJS를 사용하고 있습니다. 코드에 따라 는 컨트롤러의 액션 메소드JSON 배열을 JavaScript 배열로 변환하는 방법은 무엇입니까?
public JsonResult GetPeople()
{
var people = new List<Person>
{
new Person {Name = "aaaa", Address = "aaaaaaaaa"},
new Person {Name = "bbbb", Address = "bbbbbbbbb"},
new Person {Name = "cccc", Address = "ccccccccc"}
};
return Json(people, JsonRequestBehavior.AllowGet);
}
이며 울부 짖는 소리가 클라이언트 측 코드의 조각입니다
<ul data-bind="foreach: people">
<li>NAME:<span data-bind="text: Name"></span></li>
<li>ADDRESS:<span data-bind="text: Address"></span></li>
</ul>
<script>
function getPeopleFromServer() {
var people= [];
$.ajax({
url: "GetPeople",
cache: false,
type: "GET",
success: function (result) {
console.log("result= " + result);
people = $.parseJSON(result);
console.log("people= " + people);
}
});
return people;
}
function ViewModel() {
var self = this;
// data
self.people = ko.observableArray(getPeopleFromServer());
}
ko.applyBindings(new ViewModel());
</script>
문제는 결과가에서 적절한 값을 가지고있는 동안 getPeopleFromServer 방법에 변수 사람들은 항상 null이라는 것이다 섬기는 사람. 내가 빠진 것이 있습니까?
는
console.log ("result ="+ result); –
jQuery가 결과를 JSON으로 구문 분석하는지 확인 했습니까? '$ .parseJSON'을 삭제하고 일이 시작되는지 확인할 수 있습니다 ... – rjz
'success'는 인라인 비동기 함수입니다. 기본적으로 'return people'은 'success'함수가 호출되기 전에 발생합니다. 왜냐하면 ajax 호출이 비 차단이기 때문입니다. 비동기 적으로 작동하도록 (또는 비동기 해제) ViewModel을 다시 디자인해야합니다. 다른 사람들이 코드 픽스를 사용하여 코드를 수정합니다. – Tom