2012-01-26 24 views
7

Tôi có một cấu trúc dữ liệu như ổ cắmserializing một gói dữ liệu JSON trong một jQuery Ajax POST

var s = { 
    "a": "foo", 
    "b": 5, 
    "c": {"d": "a long string"}, 
    "e": { 
     "f": { 
      "g": { 
       "h": [1, 0, -2.1, 1.43] 
      } 
     }, 
     "i": { 
      "j": { 
       "k": [-3.2, 3.003, 0, 0] 
      } 
     } 
    } 
}; 

Tôi muốn để lưu trữ các "a", "b", "c" và "e" chìa khóa của biến s trong bảng cơ sở dữ liệu để tôi có thể tái tạo lại chúng. Tôi đang gửi s qua một jQuery Ajax POST. Các giá trị sẽ được chèn vào và được lưu trữ dưới dạng văn bản thuần túy (ngoại trừ "b" luôn là số).

ajax: { 
    url: uri, 
    type: "POST", 
    data: s, 
    dataType: "json", 
    success: function(data, status) { .. } 
} 

Đây là vấn đề tôi đang gặp phải. Trong Firebug, tôi có thể thấy các thông số đăng bài của mình… chúng thực sự bị rối tung lên. Có vẻ như các dữ liệu đã được xuất bản ở cấp độ của mỗi yếu tố (kinda giống như một serialization sâu) trong khi tôi đã hy vọng cho một cái gì đó giống như

e={"f":{"g":{"h":[1,0,-2.1,1.43]}},"i":{"j":{"k":[-3.2,3.003,0,0]}}} 

Cập nhật: Thay vào đó, tôi nhận được sau đây (tôi đã không thoát trên các chuỗi bên dưới để dễ đọc hơn)

a=foo&b=5&c[d]=a long string&e[f][g][h][]=1&e[f][g][h][]=0&e[f][g][h][]=-2.1&e[f][g][h][]=1.43 

Có lẽ tôi đang làm điều này sai, vì vậy hãy hướng dẫn tôi một cách tốt hơn.

Trả lời

9

Sử dụng phương thức JSON.stringify để tuần tự hóa đối tượng dữ liệu thành chuỗi và đăng nó. Về phía máy chủ chỉ lưu trữ này như là trong DB của bạn. Hãy thử điều này

ajax: { 
    url: uri, 
    type: "POST", 
    data: { data: JSON.stringify(s) }, 
    dataType: "json", 
    success: function(data, status) { .. } 
} 

Hầu như tất cả các trình duyệt hiện đại đều hỗ trợ JSON nguyên bản. Đối với các trình duyệt không có bản gốc, bạn có thể bao gồm các js bắt buộc từ http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js

+0

+1, đặc biệt là để liên kết đến JSON2.js cho các trình duyệt cũ. –

+0

Tôi khá chắc chắn bạn sẽ mã hóa đôi đối tượng dữ liệu đó, vì bạn đang gọi stringify trên s – Joe

+0

Nếu giá trị dữ liệu là một chuỗi, 'jQuery' chỉ thực hiện mã hóa URI để làm cho nó đủ an toàn để chuyển qua HTTP. Tôi không nghĩ như vậy nó sẽ mã hóa chuỗi. – ShankarSangoli

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