2012-10-25 40 views
0

可能重复:
Deserializing JavaScript object instance如何发送javascript对象的数组到服务器?

我有以下的JavaScript构造对象的数组:

function MenuViewModel() { 
    var self = this; 
    var courseOptionObject = {}; 

    courseOptionObject["Options"] = []; 
    self.ShowHide = ko.observable(false); 

     self.Id = ko.observable(getId()); 
     self.Name = ko.observable(); 
     self.CourseName = ko.observable(); 
     self.Sequence = ko.observable('1'); 

     courseOptionObject["MenuId"] = self.Id(); 
     self.CourseOptions = ko.observable(new CourseOptionViewModel(courseOptionObject));            

    if (typeof MenuViewModel.saveButtonControll == "undefined") { //static members of class 
     MenuViewModel.saveButtonControll = ko.observable(new buttonModel({ Text: "Save & Continue", Disabled: true, Visible: true })); 
     MenuViewModel.IsTextEnable = ko.observable(true); 
    } 

    self.showDeleteIcon = function (data, event) { 
     data.ShowHide(true); 
    }; 

    //Hide the delete button from the menu (call at mouseleave form the menu) 
    self.hideDeleteIcon = function (data, event) { 
     data.ShowHide(false); 
    }; 

    self.Errors = ko.validation.group(self); 
} 

我的数组是:

var jObectArray = new Array(); 
for(var i = 0; i < 5; i++) 
{ 
jObejctArray.push(new MenuViewModel()); 
} 

我通过AJAX发送它:

$.ajax({ 
    url :'urltoserver', 
    type: 'POST', 
    data: { array : JSON.stringify(jObectArray) }, 
    dataType: 'JSON' 
}); 

但我得到一个空数组服务器。任何人都可以告诉我我失踪了什么?

EDIT

的console.log(jObejctArray)输出是(数组2 obejct):

[ 
{"ShowHide":false,"Id":"8c4c470d-2b25-4070-8d3e-e307e9d49107", 
"Name":"Menu-1","CourseName":"course-1","Sequence":1, 
"CourseOptions":{"MenuId":"8c4c470d-2b25-4070-8d3e-e307e9d49107", 
"Options":[],"errors":["Can`t left options list empty","Can`t insert empty value."], 
"Errors":["Can`t left options list empty","Can`t insert empty value."]}, 
"errors":[],"Errors":[]}, 

{"ShowHide":false,"Id":"3da9cbc0-9db8-4297-8245-351caaec9f08", 
"Name":"Menu-2","CourseName":"course-2","Sequence":"2", 
"CourseOptions":{"MenuId":"3da9cbc0-9db8-4297-8245-351caaec9f08", 
"Options":[],"errors":["Can`t left options list empty","Can`t insert empty value."], 
"Errors":["Can`t left options list empty","Can`t insert empty value."]}, 
"errors":[],"Errors":[]} 
] 
+0

你能先做到这一点'的console.log (jObjectAray)'并告诉我们你得到的是什么 – 2619

+0

@ al0neevenings请检查我的编辑 –

回答

0

敲除观测不是简单的领域,而功能。函数不会被JSON.stringify处理。通过指定添加的toJSON方法的自定义序列覆盖默认字符串化行为(这将由JSON.stringify调用)

尝试添加该到你的模型:

self.toJSON = function() { 
    var result = {}; 
    result.Name = ko.utils.unwrapObservable(self.Name); 
    ... 
    /// you could either iterate over the fields with `for .. in` 
    return result; 
} 
+0

而不是创建自我toJson fucntion我使用inbuilt ko.toJSON,但我仍然获得相同的空数组到服务器,我把'console.log (jObjectArray)'我的编辑输出请看看 –

+0

,你有没有试过我写的东西? –

相关问题