AJAX – 使用AJAX将knockout observable作为JSON对象发送到服务器

我试图以JSON对象的forms发送绑定到特定observable的表单字段到我的服务器,但我在服务器端收到空的JSON字符串。 我不想发送整个视图模型来完成此任务。 这是我到目前为止的javascript:

$(document).ready(function(){ ko.applyBindings(new AddSubjectKo()); }); function AddSubjectKo() { var self=this; self.name = ko.observable(); self.quiz = ko.observable(); self.ass = ko.observable(); self.oht = ko.observable(); self.sess = ko.observable(); self.ese = ko.observable(); self.SubjectAdded=function() { $.ajax({ url: "api/courses", type: "post", data: formToJSON(), contentType: "application/json", success: function(data){ alert("success"); }, error:function(jqXHR, textStatus, errorThrown) { alert("failure"); } }); function formToJSON() { alert(self.name()); return JSON.stringify({ "name": self.name, "quiz": self.quiz, "ass": self.ass, "oht": self.oht, "sess": self.sess, "ese": self.ese, }); } } //$("#alert").slideDown(); } 

您可以使用ko.toJSON函数:

  function AddSubjectKo() { var self=this; self.name = ko.observable(); self.quiz = ko.observable(); self.ass = ko.observable(); self.oht = ko.observable(); self.sess = ko.observable(); self.ese = ko.observable(); self.SubjectAdded=function() { $.ajax({ url: "api/courses", type: "post", data: ko.toJSON(self), contentType: "application/json", success: function(data){ alert("success"); }, error:function(jqXHR, textStatus, errorThrown) { alert("failure"); } }); } 

只需使用调用observable(添加括号)来获取observable中的值:

  $(document).ready(function(){ ko.applyBindings(new AddSubjectKo()); }); function AddSubjectKo() { var self=this; self.name = ko.observable(); self.quiz = ko.observable(); self.ass = ko.observable(); self.oht = ko.observable(); self.sess = ko.observable(); self.ese = ko.observable(); self.SubjectAdded=function() { $.ajax({ url: "api/courses", type: "post", data: formToJSON(), contentType: "application/json", success: function(data){ alert("success"); }, error:function(jqXHR, textStatus, errorThrown) { alert("failure"); } }); function formToJSON() { alert(self.name()); return JSON.stringify({ "name": self.name(), "quiz": self.quiz(), "ass": self.ass(), "oht": self.oht(), "sess": self.sess(), "ese": self.ese(), }); } } //$("#alert").slideDown(); }