2009-11-17 33 views
54

Tôi đang cố gắng đặt một số dữ liệu định dạng JSON qua Ajax với jQuery vào máy chủ. Mã của tôi trông giống như sau:jQuery - Làm cách nào để đưa JSON qua Ajax?

$.ajax({ 
    type: "PUT", 
    url: myURL, 
    contentType: "application/json", 
    data: {"data": "mydata"} 
}); 

Nhưng ở phía máy chủ, tôi nhận được một chuỗi data=mydata, thay vì JSON dự kiến. Firebug nói với tôi như vậy.

Lỗi ở đâu?

+0

bạn đang sử dụng gì trên server-side? –

+0

Tôi sử dụng Couchdb dự kiến ​​JSON. –

+6

AJAX PUT * có * trong tất cả các trình duyệt chính. HTTP PUT không phải. Vì vậy, trong trường hợp này, nó là tốt (khuyến khích, thậm chí) để sử dụng PUT. –

Trả lời

46

Tôi nghĩ dữ liệu cần phải là Chuỗi. Các đối tượng được chuyển đổi thành chuỗi truy vấn là những gì bạn đang thấy ở đây.

Bạn có thể sử dụng phương thức JSON.stringify(obj) để chuyển đổi Đối tượng thành Chuỗi. Mã cho đối tượng JSON có sẵn từ: https://github.com/douglascrockford/JSON-js/blob/master/json2.js.

Cách khác, chỉ cần chuyển mã bạn đang sử dụng để tạo đối tượng dưới dạng chuỗi chữ, nhưng tôi cho rằng đây chỉ là một ví dụ và bạn sẽ muốn mã hóa một số đối tượng bạn đã tạo.

+1

Đây là cách @Juri nên đi nếu anh ta muốn JSON trên máy chủ. Tôi sử dụng thư viện json2.js mọi lúc và nó hoạt động rất tốt. –

+3

sẽ là tốt đẹp nếu jQuery sẽ xâu chuỗi dữ liệu, giống như với POST. – neoneye

+1

Liên kết được cập nhật: https://github.com/douglascrockford/JSON-js/blob/master/json2.js – Ben

30

Nếu bạn luôn phải gửi JSON trong ứng dụng, bạn có thể thực hiện điều này ở đâu đó trong init và sau đó sử dụng lệnh gọi $.ajax mặc định như trong ví dụ của bạn và nó sẽ luôn được nối tiếp thành chuỗi JSON thay vì mặc định Ajax chuỗi truy vấn.

Ở đây tôi sử dụng đối tượng JSON đề cập ở trên:

$.ajaxSetup({ 
    contentType : 'application/json', 
    processData : false 
}); 
$.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
    if (options.data){ 
     options.data=JSON.stringify(options.data); 
    } 
}); 
1
//url: this is a reference to the XML, where you need to define the mapping. 
//<entry key="/getEmpDetails/transEfileGenerate.app"> 
//<bean class="com.adp.ems.framework.spring.MappingItem" p:delegate-ref="efilePageDelegate" 
//p:action="passJSONObjectAndGetWebServiceOutput" /> 

//str1 is the input JSON that you need to pass... Ajax will automatically take care to get the response. 
//</entry> 

var kw = { 
    url : "getEmpDetails/transEfileGenerate.app", 
    timeout : 30000, 
    handleAs : "json", 
    sync: false, 
    putData : str1, 
    headers: { "Content-Type": "application/json"}, 
    load : function(result) { 
}, 
Các vấn đề liên quan