2013-05-04 41 views
8

Tôi có một số nguyên mẫu Javascript. Ban đầu, các cá thể sẽ chỉ được điền đầy đủ ID, với một số thông tin về trình giữ chỗ chung cho các dữ liệu khác. Sau đó tôi gửi một tin nhắn đến máy chủ với ID và loại đối tượng (sử dụng chức năng AJAX của jQuery) và máy chủ trả về một đối tượng JSON với tất cả thông tin còn thiếu (nhưng không có ID). Các biến trong đối tượng được trả về có cùng tên giống với các biến trong đối tượng hiện có.Sao chép đối tượng JSON AJAX vào đối tượng hiện có

Cách dễ nhất để chuyển điều này vào đối tượng trống hiện có là gì? Tôi đã đưa ra một vài lựa chọn thay thế

  • thiết lập các đối tượng tương ứng với đối tượng trở về, sau đó copy vào id (mất chức năng nguyên mẫu?)
  • tạo một hàm cho từng đối tượng mà phải mất một đối tượng với nhau cấu trúc và các bản sao dữ liệu
  • lặp qua các cặp khóa-giá trị của đối tượng JSON để và sao chép chúng vào đối tượng hiện

Nếu tôi sử dụng tùy chọn thứ ba, đây là cách chính xác để làm điều đó? :

for (var key in json) { 
    if (object.hasOwnProperty(key)) { 
     object[key] = json[key]; 
    } 
} 

giả json là đối tượng quay trở lại và object là đối tượng hiện có.

+2

Nếu 'json' là JSON đơn giản thì tôi không nghĩ bạn thậm chí cần kiểm tra' hasOwnProperty'. Trừ khi ai đó đã được funking với 'Object.prototype'. –

+0

Câu hỏi đặt ra là, bạn muốn làm gì với đối tượng JSON của mình. Nếu bạn muốn đánh giá một đối tượng, JSON.parse() thực hiện thủ thuật cho bạn. Nếu bạn muốn kết hợp nó với một đối tượng hiện có, jQuery.extend() sẽ là một gợi ý tốt hơn. –

+0

@PaulGrime Tôi đang làm điều đó để phòng ngừa trong trường hợp có thêm một khóa trong đối tượng 'json' mà tôi không muốn trong' đối tượng' hiện có. Nếu bạn nhận thấy, tôi đang lặp qua các phím trong 'json' nhưng kiểm tra đối với' đối tượng'. – Jaws212

Trả lời

8

Hãy thử này sử dụng extend():

var newObject = jQuery.extend({}, oldObject); 
+0

Âm thanh hoàn hảo! Tôi đã không nhận thức được chức năng này cả. Và bởi vì nó kết hợp tất cả các thuộc tính, bất kỳ thừa kế nào tôi đã thực hiện sẽ vẫn dính, đúng không? – Jaws212

+0

Vâng, bạn nói đúng. –

1

Bạn có thể sử dụng jQuery.extend: http://api.jquery.com/jQuery.extend/

$.extend(object1,object2); 

Nếu JSON của bạn là một chuỗi sau đó tạo ra một đối tượng từ đó đầu tiên:

var object1=$.parseJSON(myJsonString); 
+0

Không cần thiết cho một parseJSON Methodcall(), do đó ngày nay mọi người đều có thể sử dụng JSON.parse(). jQuery không làm gì khác: if (window.JSON && window.JSON.parse) { cửa sổ trả lại.JSON.parse (dữ liệu); } –

+0

nhưng nếu window.JSON.parse là sai, nó sẽ làm nhiều hơn một chút. – HMR

+0

nhưng window.JSON.parse sẽ không thành công ngay hôm nay – vvondra

Các vấn đề liên quan