我有这样的代码。主要问题是var jsonOfLog = JSON.stringify(data);
提供了正确的JSON "[{"name":"Jhon"},{"name":"Nick"},{"name":"Sanders"}]"
,但var jsonOfLog = JSON.stringify(test);
提供了undefined
。
为什么呢?这是类型或其他问题?如何解决这个问题?
function AppViewModel() {
self = this;
self.items = ko.observableArray();
self.addItems = function () {
self.items.push({ Name: 'Test', Date: 'Test', Time: 'Test'});
}
function time_format(d) {
hours = format_two_digits(d.getHours());
minutes = format_two_digits(d.getMinutes());
seconds = format_two_digits(d.getSeconds());
return hours + ":" + minutes + ":" + seconds;
}
function format_two_digits(n) {
return n < 10 ? '0' + n : n;
}
self.save = function () {
data = [{ name: 'Jhon' }, { name: 'Nick' }, { name: 'Sanders' }];
var test = self.items;
var jsonOfLog = JSON.stringify(test);
debugger;
$.ajax({
type: 'POST',
dataType: 'text',
url: "ConvertLogInfoToXml",
data: "jsonOfLog=" + jsonOfLog,
success: function (returnPayload) {
console && console.log("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log("request failed");
},
processData: false,
async: false
});
}
self.capitalizeLastName = function () {
debugger;
var date = $("#date").val();
$.ajax({
cache: false,
type: "GET",
url: "GetByDate",
data: { "date": date },
success: function (data) {
var result = "";
$.each(data, function (id, item) {
var tempDate = new Date();
var tempTime = item.Time;
debugger;
tempDate =new Date(parseInt(item.Date.replace("/Date(", "").replace(")/", ""), 10));
self.items.push({ Name: item.Name, Date: (tempDate.getMonth() + 1) + '/' + tempDate .getDate() + '/' + tempDate.getFullYear(), Time: tempTime.Hours });
});
},
error: function (response) {
debugger;
alert('eror');
}
});
}
}
ko.applyBindings(new AppViewModel());
答案 0 :(得分:1)
我在代码中看到了一些可能导致问题的事情。
首先,test
变量是对self.items
的引用,它是一个Knockout observableArray
而不是本机JavaScript数组。我对Knockout不太熟悉,但可能不会将其序列化为数组。
此外,在构造函数的第一行,您将在不使用self
的情况下分配给var
。这是为全局变量而不是本地变量赋值。如果您的代码中的其他位置有类似的构造,则self
引用可能会被覆盖。
答案 1 :(得分:0)
你不能像这样对一个可观察的数组进行字符串化;你最终串起函数而不是数组。你应该使用ko.toJSON(viewModel)
函数。
请记住,在KnockOut中,您始终需要使用object.myObservableValue()
来访问observable的实际值(而不是object.myObservableValue
),否则您最终会使用函数而不是值。< / p>