【发布时间】:2014-03-19 10:18:42
【问题描述】:
尝试像这样从服务器加载带有 json 的 observableArray:
function InsightViewModel() {
var self = this;
self.Name = ko.observable("");
var insightData = {
Name: self.Name
};
self.insightData = ko.observable();
self.Insights = ko.observableArray([]);
$.ajax({
type: "GET",
url: '@Url.Action("GetIndexData", "Admin")',
contentType: "application/json",
dataType: "json",
data:{},
success: function (data) {
self.Insights(data);
alert(JSON.stringify(data) + "Array length " + self.Insights.length);
},
error: function (error) {
alert(error.status + " " + error.statusText);
}
});
};
var viewModel = new InsightViewModel();
ko.applyBindings(viewModel);
alert(viewModel.Insights.length);
我可以从服务器发出 json,它是有效的。但是数组是空的。
我试过了,没有运气:
$(data).each(function (element) {
self.Insights.push(element);
});
没有淘汰赛的经验。有什么想法吗?
【问题讨论】:
-
alert(viewModel.Insights.length);可能在您的$.ajax.sucess回调调用之前运行。如果您尝试ko.dataFor(document.body).Insights().length会怎样? -
你错误地得到了长度
Insights数组,它应该是self.Insights().length(带括号)。 -
你说得对,亚历山大,我的错……
-
您不需要在 Ajax 调用中设置
contentType和dataType。服务器通过发送正确的响应头来做到这一点,jQuery 会自动接收它。把它关掉吧。 -
@Alexander 您能创建一个答案,以便我接受吗?
标签: jquery json asp.net-mvc-4 knockout.js