2017-08-10 13 views
8

मैं Rails 4.2 एप्लिकेशन को रेल 5.1 पर माइग्रेट करने का प्रयास कर रहा हूं। रेल में 4.2 हम भारी JQuery का उपयोग किया। फिलहाल मैं फॉर्म बनाने के लिए संघर्ष कर रहा हूं, remote: true विशेषता के साथ ठीक से काम करता है। एक उदाहरण के रूप में इस एक सरल रूप है, जहां उपयोगकर्ता देशरेल 5, रिमोट: सच्चा फॉर्म खाली डेटा

= 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 

नियंत्रक

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

मैं respond_to साथ js प्रतिक्रिया स्वरूप जोड़ने की कोशिश की है का चयन है, लेकिन उस मामले में यह कन्वर्ट करने के लिए कोशिश करता है निष्पादन योग्य जावास्क्रिप्ट के लिए @user। ईवेंट हैंडलर के रूप में इस

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

संपादित

रिस्पांस हैडर

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 

अनुरोध हेडर

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 

रिस्पांस

तरह लग रहा है
{ 
    firstName:'John', 
    lastName: 'Smith', 
    country: 'USA' 
} 
+0

आप डेवलपर उपकरण सर्वर की प्रतिक्रिया के माध्यम से निरीक्षण कर सकते हैं पर पूर्ववत है? (क्रोम में, टैब "नेटवर्क", फॉर्म को रिमोट सबमिट करें, अनुरोध ढूंढें और HTTP req/res का विश्लेषण करें) – MrYoshiji

+0

@MrYoshiji कृपया –

+0

अपडेट करें यदि आप 'AJAX: सफलता' कॉलबैक में 'डीबगर' डालते हैं, क्या आप 'e',' data', आदि के लिए कोई मान देख सकते हैं? – MrYoshiji

उत्तर

7

बस एक ही समस्या में चलते समय इसे समझ लिया।

http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html#dealing-with-ajax-events

के अनुसार, मैं तुम बड़े jQuery-ujs के बजाय रेल-ujs उपयोग कर रहे हैं मान। Jquery-ujs में कोड काम करेगा और डेटा, स्थिति, xhr वापस किया जाएगा; रेल-ujs लेकिन केवल एक विशेषता देता है - घटना और अतिरिक्त चीजें event.details

उदाहरण के अनुसार गाइड में

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

आप event.detail फोन करके प्रतिक्रिया का उपयोग कर सकते पर सरणी से पहुंचा जाता है [0]

आप काफी इस कार्यशीलता पर निर्भर एकाध कोड मिल गया है, शायद एक बेहतर शर्त रेल-ujs jQuery ujs-

+0

धन्यवाद, जिसने समस्या हल की है :) –

+1

निराशाजनक बात यह है कि आधिकारिक दस्तावेज भी पुराना है। – dimroc

संबंधित मुद्दे