2017-08-22 22 views
6

Rails API'sı ile konuşması gereken bir React istemci uygulamasına sahibim. Ben Rails.ajax rails-ujs yöntemini kullanmak istiyorum.JSRS verilerini bir Rails.ajax POST çağrısı (jQuery kullanılmadan) olarak nasıl gönderirsiniz?

:

mydata = { 
thing: { 
    field1: value1, 
    field2: value2, 
}} 

böyle elle yazın bir application/x-www-form-urlencoded içeriğe dönüştürmek gerekir: Örneğin: Böyle bir JSON nesnesine data ayarlayamıyor gibi

Rails.ajax({ 
    type: "POST", 
    url: "/things", 
    data: mydata, 
    success: function(repsonse){...}, 
    error: function(repsonse){...} 
}) 

görünüyor

mydata = 'thing[field1]=value1&thing[field2]=value2' 

Bu, düz veriler için sorun değil, ancak iç içe geçmiş veriler için hızlı bir şekilde karmaşık hale geliyor.

jQuery, istekte bulunmadan önce otomatik olarak dönüştürmeyi yapar.

Rails UJS'nin otomatikman varsa otomatik olarak merak ediyorum, ama dokular ya da kod içinde bir şey bulamadım.

cevap

1

Ajax çağrısı birkaç kez kullandım ve json verilerini bu şekilde gönderirdim. Yakut denetleyicisi

var fd = new FormData(); 
fd.append("jsondata", JSON.stringify(mydata)); 

$.ajax({ 
    url: ... 
    type :"post", 
    data: fd 
    success:function(){ 
    } 
}) 

Ayrıştırma Json veri kolaydır. sadece JSON.parse(params["jsondata"])
kullanabilirsiniz. Bu sizin durumunuz için çalışır.

+0

ayrıştırmak için JSON.parse kullanıyor bunu modülü raylar-ujs görebilirsiniz. Ama cevabın için teşekkürler. –

1

Kütüphane kodunu inceledim ve bunu desteklemiyor çünkü bir nesneyi göndermek için nesneyi dizginlemek zorundasınız ve bunu yaptıktan sonra kütüphanenin veriyi dizge olup olmadığını kontrol ettiğini keşfettim isteğin içerik türü uygulama/x-www-form-urlencoded. Bu link, kitaplıktaki koşulu gösterir. Ve bunun için, bu sorunu aşma seçeneğiniz, nesneyi giriş formuna dönüştüren veya JQuery Ajax veya başka bir kütüphaneyi kullanan bir yöntem yazmaktır.

+0

Evet, haklısın, Ahmed. Bu da baktığım kodun bir parçası. Anladığım halde verileri önceden işlediği başka bir yer olup olmadığını merak ettim. Cevabınız için teşekkürler. –

0

Sorunun yanlış anlaşıldığından emin değilim, ancak nesneyi JSON.stringify kullanarak dönüştüremiyor musunuz?

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

Kesinlikle oldukça aradığım değil ne JSON yanıtı

+0

Haklısın, onu kendim değiştirebilirim. Benim meselem, raylar-ujs'de (jQuery'de olduğu gibi, bkz. [ProcessData] (http://api.jquery.com/jquery.ajax/)) dahili bir yol var mıydı. Ayrıca, istek verilerinde, yanıtta değil JSON hakkında konuşuyorum. –

+0

Bunu sanmıyorum, ama neden bu büyük bir anlaşma olduğundan emin değil misiniz? JSON.stringify'a oldukça düşük bir yük. Yoksa ne yapmaya çalıştığını anlamadım mı? –

İlgili konular