我在使用Rails以AJAX方式解决表单处理方面遇到了困难。我将尝试解释我所拥有的不同部分,以及我怀疑的地方:
以下是 new.html.erb 的外观:
<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :remote => true) do |f| %>
<%= f.input :email, :label => false, :placeholder => 'Enter Email' %>
<%= f.submit "Step inside", :id => 'invitation_button' %>
<% end %>
<div id="request_invite">
</div>
如您所见,我有:remote => true
,因此提交是通过AJAX完成的。另外,我有一个空容器(#request_invite),如果提交成功,将填充部分容器。
以下是 registrations_controller.rb(创建方法)的样子:
def create
build_resource
if resource.save
if resource.active_for_authentication?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_up_path_for(resource)
else
expire_session_data_after_sign_in!
respond_with resource, :location => after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
respond_with resource
end
end
我怀疑在这里。我应该写什么才能让JS知道提交成功与否。如果成功,我想将一个名为_thank_you.html.erb
的部分呈现到#request_invite容器中。如果不成功,我想在表单中显示错误。
这是我的Javascript文件来处理AJAX响应:
$('document').ready(function() {
$("#new_user").on('ajax:success', function(data, status, xhr)
{
alert("test");
})
});
现在警报(“测试”)总是出现,因为我无法知道是否成功。
非常感谢,我希望我能够很好地解释自己。
答案 0 :(得分:1)
如果您进行了手动ajax调用,并且在提交表单时成功和失败回调(而不是使用remote:true),该怎么办?我很累,并且不确定我是否正在按照你的控制器动作进行操作。
$('#form_name').submit (e) ->
e.preventDefault()
$.ajax
type: "POST"
url: "/whatever_the_path_is"
data: { 'email': $(@).val() }
success: (result) ->
$('#request_invite').html(result)
failure: ->
$('#request_invite').html("<h1>Request Failed</h1>")
您的控制器可能如下所示:
def create
build_resource
if resource.save
if resource.active_for_authentication?
sign_in(resource_name, resource)
# respond_with resource, :location => after_sign_up_path_for(resource)
render partial: '/partials_folder/thank_you'
else
expire_session_data_after_sign_in!
# respond_with resource, :location => after_inactive_sign_up_path_for(resource)
render partial: '/partials_folder/there_was_an_error'
end
else
clean_up_passwords resource
respond_with resource
end
end
希望这能让你开始走上正确的道路。