jQuery đăng json hợp lệ trong cơ thể yêu cầu


180

Vì vậy, theo các tài liệu jQuery Ajax , nó tuần tự hóa dữ liệu dưới dạng chuỗi truy vấn khi gửi yêu cầu, nhưng cài đặt processData:falsesẽ cho phép tôi gửi JSON thực tế trong phần thân. Thật không may, tôi gặp khó khăn trong việc xác định đầu tiên, nếu điều này xảy ra và thứ 2 thì đối tượng trông như thế nào đang được gửi đến máy chủ. Tất cả những gì tôi biết là máy chủ không phân tích cú pháp những gì tôi đang gửi.

Khi sử dụng http client để đăng một đối tượng bằng chữ {someKey:'someData'}, nó hoạt động. Nhưng khi sử dụng jQuery data: {someKey:'someData'}, nó thất bại. Thật không may khi tôi phân tích yêu cầu trong Safari, nó nói rằng tải trọng thư là [object Object]... tuyệt vời ... và trong Firefox bài viết trống ...

Khi đăng nhập nội dung cơ thể ở phía Java, nó thực sự có được [object Object]như vậy, làm thế nào để người ta gửi dữ liệu JSON THỰC SỰ ??

Có ai có kinh nghiệm với dịch vụ Java tuần tự hóa dữ liệu JSON trong phần thân yêu cầu, với yêu cầu được gửi từ jQuery không?

BTW ở đây là yêu cầu $ .ajax đầy đủ:

$.ajax({
    contentType: 'application/json',
    data: {
        "command": "on"
    },
    dataType: 'json',
    success: function(data){
        app.log("device control succeeded");
    },
    error: function(){
        app.log("Device control failed");
    },
    processData: false,
    type: 'POST',
    url: '/devices/{device_id}/control'
});

Câu trả lời:


292

Một yêu cầu JSON thực tế sẽ trông như thế này:

data: '{"command":"on"}',

Nơi bạn đang gửi một chuỗi JSON thực tế. Để có giải pháp tổng quát hơn, hãy sử dụng JSON.stringify()để tuần tự hóa một đối tượng thành JSON, như sau:

data: JSON.stringify({ "command": "on" }),

Để hỗ trợ các trình duyệt cũ không có JSONđối tượng, hãy sử dụng json2.js sẽ thêm nó vào.


Những gì hiện đang xảy ra là do bạn có processData: false, về cơ bản nó đang gửi cái này: ({"command":"on"}).toString()đó là [object Object]... những gì bạn thấy trong yêu cầu của mình.


Vì vậy, tôi không còn cần processData: false sử dụng JSON.stringify()?
brad

6
@brad - chính xác, sẽ không có vấn đề gì sau khi thực hiện việc này vì nó đã là một chuỗi và trong trường hợp đó jQuery sẽ không xử lý nó thêm nữa .
Nick Craver

2
Làm việc như một cơ duyên, cảm ơn nhiều! Có đúng là tất cả các cơ quan yêu cầu được dự kiến ​​là các chuỗi được phân tích cú pháp ở đầu bên kia không?
brad

Tại sao jQuery phân tích cú pháp datathành một chuỗi, trái ngược với việc chỉ gửi nó dưới dạng JSON?
Adam Zerner

Lưu ý bên lề: nếu bất kỳ ai cần nó dưới dạng "tải trọng yêu cầu cơ thể" thay vì dữ liệu biểu mẫu, đừng quên đưa vào contentType: "application/json; charset=utf-8",như được đề cập trong chủ đề này: stackoverflow.com/questions/21201270/
Lỗi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.