Tôi đang cố di chuyển ứng dụng Rails 4.2 sang Rails 5.1. Trong đường ray 4.2, chúng tôi đã sử dụng rất nhiều JQuery. Hiện tại tôi đang cố gắng tạo các biểu mẫu, với thuộc tính remote: true
hoạt động đúng. Như một ví dụ này là một hình thức đơn giản mà người dùng chọn quốc giađường ray 5, từ xa: biểu mẫu dữ liệu rỗng thực sự
= 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
Bộ điều khiển
def update
@user.update!(user_params)
render json: @user
end
Tôi đã cố gắng thêm các định dạng phản ứng respond_to
với js
, nhưng trong trường hợp đó nó cố gắng để chuyển đổi @user
để thực thi javascript. Tính đến xử lý sự kiện trông như thế này
$('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
đáp ứng Tiêu đề
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
Tiêu đề yêu cầu
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
đáp ứng
{
firstName:'John',
lastName: 'Smith',
country: 'USA'
}
bạn có thể kiểm tra thông qua các công cụ phát triển đáp ứng của máy chủ? (trong Chrome, tab "mạng", thực hiện gửi biểu mẫu từ xa, tìm yêu cầu và phân tích lại HTTP/resq) – MrYoshiji
@MrYoshiji, vui lòng xem bản cập nhật –
nếu bạn đặt một trình gỡ lỗi 'trong lời gọi lại« ajax: success', bạn có thể thấy bất kỳ giá trị nào cho 'e',' dữ liệu', v.v ... không? – MrYoshiji