Tôi đã có định nghĩa đối tượng JavaScript chứa tham chiếu vòng tròn: nó có thuộc tính tham chiếu đối tượng cha.Stringify (chuyển đổi thành JSON) một đối tượng JavaScript với tham chiếu vòng tròn
Nó cũng có các chức năng mà tôi không muốn chuyển qua máy chủ. Làm thế nào tôi sẽ serialize và deserialize các đối tượng này?
Tôi đã đọc rằng phương pháp tốt nhất để làm điều này là sử dụng chuỗi ký tự của Douglas Crockford. Tuy nhiên, tôi nhận được lỗi sau trong Chrome:
TypeError: Converting circular structure to JSON
Mã:
function finger(xid, xparent){
this.id = xid;
this.xparent;
//other attributes
}
function arm(xid, xparent){
this.id = xid;
this.parent = xparent;
this.fingers = [];
//other attributes
this.moveArm = function() {
//moveArm function details - not included in this testcase
alert("moveArm Executed");
}
}
function person(xid, xparent, xname){
this.id = xid;
this.parent = xparent;
this.name = xname
this.arms = []
this.createArms = function() {
this.arms[this.arms.length] = new arm(this.id, this);
}
}
function group(xid, xparent){
this.id = xid;
this.parent = xparent;
this.people = [];
that = this;
this.createPerson = function() {
this.people[this.people.length] = new person(this.people.length, this, "someName");
//other commands
}
this.saveGroup = function() {
alert(JSON.stringify(that.people));
}
}
Đây là một trường hợp thử nghiệm mà tôi đã tạo cho câu hỏi này. Có lỗi trong mã này nhưng về cơ bản tôi có đối tượng trong đối tượng và tham chiếu được truyền cho từng đối tượng để hiển thị đối tượng cha khi đối tượng được tạo. Mỗi đối tượng cũng chứa các hàm, mà tôi không muốn bị xâu chuỗi. Tôi chỉ muốn các thuộc tính như Person.Name
.
Làm cách nào để tuần tự hóa trước khi gửi đến máy chủ và deserialize nó giả định rằng cùng một JSON được trả lại?
Xin chào, cảm ơn câu trả lời của bạn. Tôi nên nói rằng tôi đang sử dụng jquery như là thư viện của tôi. Tôi không nghĩ rằng nó có liên quan tại time.ill cập nhật bài viết của tôi. – user1012500
@ user1012500 - Dojo hoạt động tốt cùng với jQuery. Tôi thường bao gồm các thư viện hoặc khung công tác khác để bù đắp cho những thiếu sót trong khung chính của tôi. Bạn thậm chí có thể trích xuất các phương thức 'toJson' và' fromJson' và tạo trình bao bọc jQuery của riêng bạn xung quanh chúng. Bằng cách đó bạn sẽ không cần phải kéo trong toàn bộ khuôn khổ. Thật không may, jQuery không có chức năng này ra khỏi hộp, và JSON.stringify không thể xử lý các kiểu đối tượng này. Vì vậy, ngoài các ví dụ trên, bạn có thể phải tự mình mã hóa chức năng này. –
Xin chào Brandon, tôi do dự khi thêm một thư viện khác để giải quyết vấn đề vì nó thêm một dấu chân khác vào trang web. Tuy nhiên, tôi đã cho dojo một shot và cố gắng sử dụng ví dụ của bạn chống lại tôi. Tuy nhiên, tôi chạy vào vấn đề tham chiếu vòng tròn (tôi không có nhiều kiến thức về võ đường, vì vậy tôi đã cố gắng một vài điều nhưng chủ yếu dựa trên ví dụ của bạn): http://jsfiddle.net/Af3d6/1/ – user1012500