2010-07-02 11 views
15

JSQ'yi bir Java sunucusuna göndermek için jQuery kullanıyorum, ancak JSON'umun yanlış olması gerektiğini düşünüyorum. İşte benim verilerin bir örnek ve nasıl yolluyorum:JSON biçimlendirme (jQuery AJAX gönderimi üzerinden JSON Java/Wicket sunucusuna gönderme)

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

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

Ben veri almak için Wicket takımından AbstractAjaxBehavior kullanıyorum ve ayrıştırmak tek bir JSON dizesi almak istiyorum.

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

Açıkçası ben kolayca adı ve açıklaması için değerler elde edebilirsiniz, ancak öğelerin benim dizisi için anahtar berbat: Ben parametrelerin Haritası geçti olsun, anahtar kümesi buna benzemez. Eminim bu basit bir şey, ama çözümün etrafında koşmaya devam ediyorum. Baska öneri? Teşekkürler!

+0

Merhaba Wicket AjaxBehavior kodunuzu gönderir misiniz? Benim bir sorunum var (http://stackoverflow.com/questions/4976244/using-wicket-abstractajaxbehavior-with-jquery-ajax) benim onRequest() herhangi bir veri almıyor gibi görünüyor. Teşekkürler – user193116

cevap

44

JSON.stringify kullanmak zorunda:

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

Ayrıca contentType olarak 'application/json' belirtmelidir. Varsayılan olarak jQuery, application/x-www-form-urlencoded (objectType application/json 'olsa bile) ile nesneleri seri hale getirecektir. Yani bunu elle yapmanız gerekiyor.

DÜZENLEME: 'post' için anahtar, yöntem değil, tür olmalıdır.

+1

jQuery, veri türünü json olarak belirttiğinizde içerik türünü otomatik olarak uygulama/json olarak ekler, değil mi? Sorunumu çözen JSON'umu dizginlemeye ihtiyacım vardı. Onu yakaladığın için teşekkürler! Ayrıca, verilerinizin bir parametre değeri olarak değil de bir anahtar olarak geri gelmesini istiyorsanız, bunu şu şekilde gönderin: 'data: {'lookup': JSON.stringify (lookup)}' – Jared

+5

@Jared, no. 'dataType' sunucunun gönderilmesini beklediğinizi belirtir. contentType, içerik tipidir * gönderirsiniz * ve jQuery, dataType'a göre değişmez. Ve '{' arama ': JSON.stringify (lookup)} 'oldukça doğru değil. Eğer arama "foo:" bar "}" ise, bu, 'lookup =% 7B% 22foo% 22% 3A% 22bar% 22% 7D 'gibi bir şeye kodlanmış olacaktır. Bu açıkça geçerli bir JSON belgesi değildir. Uygulama/json gönderirken, URL kodlamasını kullanmazsınız. Sanırım bu, sizin yönteminize bağlı olabilir: 'post'. Tür olmalı: 'post'. Yöntem göz ardı edilir ve varsayılan GET'dir. –

+0

Ah, mükemmel bir açıklama! Teşekkürler! – Jared