2011-06-06 9 views
13

Bir süredir googled ettik ve sadece processData: false komutunu bulabiliyorum. Aynı sorunu yaşayan birini bulamıyorum.jQuery Ajax - Ayarlama processData yanlış kesmeler için benim AJAX isteğim

JSON'u sunucuya geçiriyorum ve jquery'nin verileri otomatik olarak bir sorgu dizesine dönüştürmesini istemiyorum, bu yüzden processData'yı false olarak ayarlıyorum. ProcessData'yu çıkarırsam, istek reddedildiğini görebiliyorum, ancak en kısa sürede, herhangi bir istekte bulunulmadığını görmüyorum (Firebug & Chrome dev araçlarını kullanarak).

$.ajax({ 
      url: myUrl, 
      type: "POST", 
      data: {foo: "bar"}, 
      processData: false, 
      contentType: 'application/json' 
     }); 

Başlangıçta bu biraz daha karmaşık ama sorunu daraltmak için denemek için basitleştirdik ama bu kod basit bir parça çalışmıyor ya (yine, eğer çalışır çıkıyordu isteği ProcessData'ye yorum yapıyorum. Ayrıca konsolda herhangi bir Javascript hatası göremiyorum.

Herhangi bir yardım çok takdir edilecektir!

EDIT DÜNYA BEKLENTİLER İÇİN: Yalnız bir gün işaret ettiğinden, bir JS nesnesini veya hatalı biçimlendirilmiş bir JSON dizesini sağladığınızda jQuery herhangi bir hata alamaz. Bu istek sadece ateş etmeyecektir.

cevap

13

Verileri JSON olarak iletmek istiyorsunuz. Javascript nesnesini geçiyorsunuz. JSON, Javascript nesnelerini dizgilere serileştirmenin bir yoludur, böylece uyumluluk sorunları olmadan etrafından geçirilebilirler.

Aslında bir dizesinde JSON geçmek istiyorum:

$.ajax({ 
    url: myUrl, 
    type: "POST", 
    data: '{"foo": "bar"}', 
    processData: false, 
    contentType: 'application/json' 
}); 
+0

Çok teşekkürler! Orijinal olarak gönderdiğim daha karmaşık verilerin de yanlış biçimlendirildiğini fark ettim. JQuery'nin hatalı JSON dizesini ayrıştırmaya çalışırken herhangi bir hata atmaması ilginçtir. – paz

+3

Bu gönderiden beri biraz zaman geçti ama @lonesomday'a eklemek istiyorum. Eğer her bir özellik/değere el koymaktan kaçınmak istiyorsanız, JSON.stringify () yapabilirsiniz ve hepsi bu kadardır. – vsm

+6

Ama yine de, processData ne yapar? – getsetbro

5

Aslında varsayılan olarak processData geçti data bir nesne olduğunu varsayar ve application/x-www-form-urlencoded olarak gönderir.

özetlersek her şey ham JSON göndermek için @lonesomeday ve @vsm tarafından yukarıda adı geçen (form verilerden farklı olanı ) yapmanız gerekir:

$.ajax({ 
    url: 'http://here-i.am/send-me/an/angel', // Determining far end 
    data: JSON.stringify({foo: "bar"}), // Obtaining proper JSON string from data object 
    processData: false, // Preventing default data parse behavior 
    contentType: "application/json" // Setting proper `ContentType` for our data 
    ... 
});