2010-07-02 44 views
15

Tôi đang sử dụng jQuery để đăng JSON lên máy chủ Java, nhưng tôi nghĩ rằng JSON của tôi phải sai. Dưới đây là một ví dụ về dữ liệu của tôi và làm thế nào tôi gửi nó:Định dạng JSON (Gửi JSON qua bài đăng AJAX của jQuery tới máy chủ Java/Wicket)

var lookup = { 
    'name': name, 
    'description': description, 
    'items': [{ 
     'name': itemName, 
     'value': itemValue 
    }] 
} 

$.ajax({ 
    type: 'post', 
    data: lookup, 
    dataType: 'json' 
}); 

Tôi đang sử dụng AbstractAjaxBehavior Wicket để nhận được dữ liệu và muốn để có được một chuỗi JSON duy nhất mà tôi có thể phân tích cú pháp. Khi tôi nhận được một bản đồ của các thông số thông qua, keyset trông như thế này:

items[0][name], 
description, 
name, 
items[0][value], 

Rõ ràng tôi có thể dễ dàng nhận được các giá trị cho tên và mô tả, nhưng chìa khóa cho mảng của tôi về mục là điều sai lầm. Tôi chắc chắn nó là một cái gì đó đơn giản, nhưng tôi dường như tiếp tục chạy xung quanh các giải pháp. Bất kỳ đề xuất? Cảm ơn!

+0

Xin chào Bạn có thể đăng mã Wicket AjaxBehavior của mình không. Tôi có một vấn đề (http://stackoverflow.com/questions/4976244/using-wicket-abstractajaxbehavior-with-jquery-ajax) trong đó onRequest() của tôi dường như không nhận được bất kỳ dữ liệu nào. Cảm ơn – user193116

Trả lời

44

Bạn phải sử dụng JSON.stringify:

$.ajax({ 
    type: 'post', 
    data: JSON.stringify(lookup), 
    contentType: 'application/json', 
    dataType: 'json' 
}); 

Bạn cũng nên xác định 'application/json' như contentType. Theo mặc định, jQuery sẽ tuần tự hóa các đối tượng với ứng dụng/x-www-form-urlencoded (ngay cả khi contentType là application/json '). Vì vậy, bạn phải làm điều đó bằng tay.

CHỈNH SỬA: Khóa cho 'bài đăng' phải là loại, không phải phương thức.

+1

jQuery tự động thêm kiểu nội dung là application/json khi bạn chỉ định dataType là json, phải không? Tuy nhiên, tôi đã cần phải xâu chuỗi JSON của mình, điều này đã giải quyết được vấn đề của tôi. Cảm ơn vì đã bắt được điều đó! Ngoài ra, nếu bạn muốn dữ liệu của mình trở lại dưới dạng giá trị tham số và không phải là khóa, hãy gửi nó như sau: 'data: {' lookup ': JSON.stringify (tra cứu)} ' – Jared

+5

@Jared, no. 'dataType' chỉ định những gì bạn mong đợi máy chủ gửi. 'contentType' là kiểu nội dung * bạn đang gửi * và jQuery sẽ không thay đổi nó dựa trên dataType. Và '{'tra cứu': JSON.stringify (tra cứu)}' không hoàn toàn chính xác. Nếu tra cứu là '{foo:" bar "}', sẽ được mã hóa url thành một cái gì đó như 'lookup =% 7B% 22foo% 22% 3A% 22bar% 22% 7D' Rõ ràng đó không phải là tài liệu JSON hợp lệ. Khi bạn đăng ứng dụng/json, bạn không sử dụng mã hóa url. Tôi nghĩ rằng điều này có thể được kết nối với bạn đặt 'phương pháp: 'post''. Nó phải là loại: 'post'. Phương thức bị bỏ qua và mặc định là GET. –

+0

Ah, giải thích tuyệt vời! Cảm ơn! – Jared

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