2017-08-10 96 views
8

Rails 4.2 uygulamasını Rails 5.1'e taşımaya çalışıyorum. Raylarda 4.2 biz ağır JQuery kullandık. Şu anda formları yapmaya çalışıyorum, remote: true özniteliği düzgün çalışıyor. Örnek olarak kullanıcının ülkeyiraylar 5, uzak: gerçek form boş veri

= simple_form_for(:user_data, 
    url: user_path(@user), 
    remote: true, 
    method: :patch, 
    data: {'user-update' => true}, 
    dataType: 'json', 
    html: wrapper: :horizontal_form) do |f| 
    .panel.panel-default 
    .panel-body 
     .col-md-8 
     = f.input :country, label: 'Country', 
     = f.button :submit 

Ben respond_to ile js tepki biçimini eklemeye çalıştık

def update 
    @user.update!(user_params) 
    render json: @user 
end 

denetleyicisi seçmek basit bir şeklidir, fakat bu durumda o dönüştürmek çalışır Yürütülebilir javascript için @user. olay işleyicisi itibariyle bu

$('form[data-user-update]') 
    .on('ajax:success', function(e, data, status, xhr) { 
    // The data variable is empty 
    }) 
    .on('ajax:error', function(e, error, status, xhr) { 
    $('.simple_form').renderFormErrors('user_data', error.responseJSON); 
    }); 

EDIT'e

Tepki Başlığı

HTTP/1.1 200 OK 
X-Frame-Options: SAMEORIGIN 
X-XSS-Protection: 1; mode=block 
X-Content-Type-Options: nosniff 
Content-Type: application/json; charset=utf-8 
ETag: W/"f53889092c58dc37054386c9504ad1ff" 
Cache-Control: max-age=0, private, must-revalidate 
X-Request-Id: 712b59ff-8011-4b10-a905-83e559b47452 
X-Runtime: 0.101165 
Transfer-Encoding: chunked 

talep Başlık

Accept:text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01 
Accept-Encoding:gzip, deflate, br 
Accept-Language:en-US,en;q=0.8,et;q=0.6 
Connection:keep-alive 
Content-Length:71 
Content-Type:application/x-www-form-urlencoded; charset=UTF-8 
Host:localhost:3000 
Origin:http://localhost:3000 
Referer:http://localhost:3000/users/470d573b-b0f1-4822-b036-7d37be6672d6 
X-Requested-With:XMLHttpRequest 

Tepki

benziyor
{ 
    firstName:'John', 
    lastName: 'Smith', 
    country: 'USA' 
} 
+0

geri raylar-ujs değiştirmektir, bu işlevselliği dayanarak kod biraz var ise? (Chrome'da, "ağ" sekmesinde, uzaktaki formu gönderin, isteği bulun ve HTTP req/res'yi analiz edin) – MrYoshiji

+0

@MrYoshiji, "ajax: success' geri çağrısına bir hata ayıklayıcı" yerleştirdiyseniz lütfen –

+0

numaralı güncelleştirmeye bakın, "e", "data" vb. için herhangi bir değer görebiliyor musunuz? – MrYoshiji

cevap

7

Sadece aynı sorunla karşılaşırken bunu anladım. http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html#dealing-with-ajax-events

gereğince

Ben bunun yerine eski jquery-ujs ait raylar-ujs kullandığınız varsayılmaktadır. Jquery-ujs'de kod işe yarar ve veri, durum, xhr döndürülür; raylar-ujs ancak sadece bir özelliğini döndürür - olay ve ek işler Sen Etkinlik ayrıntısı arayarak tepkisini erişebilirsiniz

document.body.addEventListener('ajax:success', function(event) { 
    var detail = event.detail; 
    var data = detail[0], status = detail[1], xhr = detail[2]; 
}) 

kılavuzunda event.details örnek gereğince

üzerine dizi aracılığıyla erişilen [0]

muhtemelen daha iyi bir bahis jquery-ujs Eğer geliştirici araçları sunucunun yanıt yoluyla incelemek Can

+0

Teşekkürler, bu sorunu çözdü :) –

+1

Ne yazık ki resmi belgelerin de güncelliğini yitirmesidir. – dimroc