jQuery istek gövdesinde geçerli json gönderme


180

Dolayısıyla, jQuery Ajax belgelerine göre , istek gönderirken verileri bir sorgu dizesi biçiminde serileştirir, ancak ayar processData:falsegövdede gerçek JSON göndermeme izin vermelidir. Ne yazık ki bu ilk olup olmadığını belirlemek zor bir zaman yaşıyorum ve 2. nesnenin sunucuya gönderiliyor gibi görünüyor. Tek bildiğim, sunucunun gönderdiğim şeyi ayrıştırmaması.

Bir nesne değişmezi göndermek için http istemcisi kullanılırken {someKey:'someData'}çalışır. Ancak jQuery ile kullanıldığında data: {someKey:'someData'}başarısız olur. Ne yazık ki Safari'deki isteği analiz ettiğimde, yükün mesajının [object Object]... harika ... ve Firefox'ta gönderinin boş olduğunu söylüyor ...

Vücut içeriğini Java tarafında günlüğe kaydederken, kelimenin tam anlamıyla [object Object]nasıl bir REAL JSON verileri gönderir ??

Herkes jQuery gelen istek ile istek gövdesinde JSON verileri serileştirme Java hizmeti ile deneyim oldu mu?

BTW burada tam $ .ajax isteği:

$.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'
});

Yanıtlar:


293

Gerçek bir JSON isteği şöyle görünür:

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

Gerçek bir JSON dizesi gönderdiğiniz yer. Daha genel bir çözüm için, JSON.stringify()bir nesneyi şu şekilde JSON'a serileştirmek için kullanın :

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

JSONNesnesi olmayan eski tarayıcıları desteklemek için , onu ekleyecek olan json2.js dosyasını kullanın .


Şu anda olan şey, sahip olduğunuzdan beri processData: false, temelde bunu gönderiyor: ({"command":"on"}).toString()yani [object Object]... isteğinizde gördüğünüz şey.


bu yüzden artık processData: false kullanarak gerek yok JSON.stringify()?
brad

6
@brad - Doğru, bunu yaptıktan sonra önemli olmayacak çünkü zaten bir dize ve bu durumda jQuery bunu daha fazla işlemeyecek .
Nick Craver

2
bir cazibe gibi çalıştı, çok teşekkürler! Öyleyse tüm istek gövdelerinin diğer tarafta ayrıştırılacak dizeler olması doğru mu?
brad

Neden jQuery data, sadece JSON olarak göndermenin aksine, bir dizeye ayrıştırır ?
Adam Zerner

Yan not: herhangi birinin form verileri yerine "gövde talep yükü" olarak ihtiyacı varsa contentType: "application/json; charset=utf-8",, bu konuya belirtildiği gibi eklemeyi unutmayın : stackoverflow.com/questions/21201270/…
raydlevel5
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.