【发布时间】:2017-01-26 14:16:13
【问题描述】:
我的应用有 Programmes,我希望用户能够通过 AJAX 表单提交 InfoRequests。 (在后台,这将触发向程序协调员发送包含表单输入的电子邮件。)
Programmes 有页面(通过他们的show 操作呈现),这就是我想包含InfoRequest 的表单的地方。一旦发送请求,我希望用户看到积极的反馈,并且表单输入应该变成只读的,这样用户仍然可以看到他/她提交的内容,但不能直接再次提交。
我努力使 AJAX 工作,我不知道出了什么问题。我到达"InfoRequest not delivered" 行(见下文),这是预期的,因为我无法在我的开发环境中发送邮件。但是 AJAX 回调特别不会触发,所以我在表单中没有看到任何反应(也没有我在代码中放入的 window.alert 调用,除了 "init_info_request")。
这是我目前所拥有的 - 感谢任何帮助。我很乐意重新组织东西,只要它能让事情变得更精简和简单。
programmes_controller.rb
class ProgrammesController < ApplicationController
def show
@programme = Programme.friendly.find(params[:id])
@info_request = InfoRequest.new(:programme => @programme)
...
end
end
info_request.rb
class InfoRequest < MailForm::Base
attribute :first_name, :validate => true
attribute :last_name, :validate => true
attribute :programme
...
end
info_requests_controller.rb
class InfoRequestsController < ApplicationController
def new
@info_request = InfoRequest.new
end
def create
puts "**********> InfoRequest#create"
@info_request = InfoRequest.new(params[:info_request])
@info_request.programme = Programme.friendly.find(params[:info_request][:programme_id])
@programme = @info_request.programme
@coordinator = @info_request.programme.coordinator
@info_request.request = request
if @info_request.deliver
puts "**********> InfoRequest delivered"
else
puts "**********> InfoRequest not delivered"
end
end
end
end
programmes/show.html.erb
...
<%= render partial: 'info_requests/new' %>
...
info_requests/new.html
<%= render 'info_requests/new' %>
info_requests/_new.html
<%= form_for(@info_request, remote: true, id: 'info-request-form') do |f| %>
<input type="hidden" name="info_request[programme_id]" value="<%= @info_request.programme.id %>" />
... other form inputs ...
<button type="submit" id="info-request-submit" class="btn btn-primary btn-success">Yes, request information now!</button>
<% end %>
<script>
var init_info_request;
init_info_request = function() {
window.alert("init_info_request");
$('#info-request-form').on('ajax:beforeSend', function(event, xhr, settings) {
window.alert("ajax:beforeSend");
$('#info-request-submit').text("Sending request...");
});
$('#info-request-form').on('ajax:success', function(event, data, status, xhr) {
window.alert("ajax:success");
$('#info-request-submit').text("Sent!");
});
$('#info-request-form').on('ajax:complete', function(event, xhr, status) {
window.alert("ajax:complete");
});
$('#info-request-form').on('ajax:error', function(event, xhr, status, error) {
window.alert("ajax:error");
});
}
$(document).ready(function(){
init_info_request();
})
</script>
【问题讨论】:
标签: jquery ruby-on-rails ajax forms