2012-12-19 32 views
35

Đang cố gửi json. Dưới đây là chức năng của tôi:JQuery Post gửi dữ liệu biểu mẫu chứ không phải JSON

var object = ... ; 

$.ajax({ 
     type: 'POST', 
     url: '<url>', 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 
     data: object 
    }); 

Nhưng bất cứ khi nào tôi kiểm tra Chrome, nó luôn luôn gửi nó như params truy vấn:

Request Payload: 
startDate=Wed+Dec+19+2012+19%3A00%3A00+GMT-0500+(EST)&endDate=Thu+Dec+20+2012+19%3A00%3A00+GMT-0500+(EST)& 

Làm thế nào để có được nó để gửi như JSON?

Trả lời

55

Với JSON.stringify(object)

mẫu:

$.ajax({ 
    type: 'POST', 
    url: '<url>', 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    data: JSON.stringify(object) 
}); 

Note JSON.stringify không được hỗ trợ trong tất cả các trình duyệt (http://caniuse.com/#feat=json), đặc biệt là trình duyệt IE7 và thấp hơn.

Nếu bạn cần hỗ trợ này trình duyệt quá bạn có thể sử dụng thư viện javascript này: https://github.com/douglascrockford/JSON-js

+0

Cảm ơn bạn rất nhiều! – Jason

4

stringify sử dụng JSON.stringify(object)

Hiệu chỉnh trường data tới:

... 
data: JSON.stringify(object), 
... 

Cách bạn đang làm việc đó, IMO, jQuery thấy các tham số như một cuốn từ điển (cặp khóa-giá trị), và xây dựng chuỗi được mã hóa theo phần trăm từ đó; và do đó bạn thấy đầu ra đó.

+0

cảm ơn, đã giúp/ – ajahongir

-1

tôi đã tìm thấy nó dễ dàng hơn để gửi dữ liệu trong mặc định 'application/x-www-form-urlencoded' định dạng với JSON như một trường như sau:

$.ajax({ 
    type: 'POST', 
    url: '<url>', 
    dataType: 'json', 
    data: {json:JSON.stringify(object)} 
}); 

Trên máy chủ sử dụng phương thức thông thường để nhận trường gọi là json.

Chỉ cần chia sẻ để xem điều này có hợp lệ với bạn hay không.

+0

Điểm tốt! Nó chỉ phụ thuộc vào cách OP cần/muốn nó với thiết lập máy chủ của họ – Ian

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