Javascript 在使用Ajax提交Desive登录表单后,如何让jQuery.on()工作?

Javascript 在使用Ajax提交Desive登录表单后,如何让jQuery.on()工作?,javascript,jquery,ruby-on-rails,ajax,devise,Javascript,Jquery,Ruby On Rails,Ajax,Devise,关于这一点有很多问题,但没有一个能给我一个肯定的答案。在my Rails 3.2应用程序中,用户可以选择创建新用户或在某个表单末尾以现有用户身份登录。为了允许现有用户登录,我使用Desive登录表单实现了一个引导模式,该表单通过Ajax提交给我的自定义SessionController。Ajax请求工作正常,并且在不离开页面的情况下登录用户,但是我很难让jQuery.on处理程序正常工作,以便在成功请求发生后页面上的某些内容发生更改。下面,我发布了表单、RegistrationControlle

关于这一点有很多问题,但没有一个能给我一个肯定的答案。在my Rails 3.2应用程序中,用户可以选择创建新用户或在某个表单末尾以现有用户身份登录。为了允许现有用户登录,我使用Desive登录表单实现了一个引导模式,该表单通过Ajax提交给我的自定义SessionController。Ajax请求工作正常,并且在不离开页面的情况下登录用户,但是我很难让jQuery.on处理程序正常工作,以便在成功请求发生后页面上的某些内容发生更改。下面,我发布了表单、RegistrationController和jQuery代码片段的代码,该表单的目的是在登录出现错误时发出警告消息,但还没有完成那么多工作

我曾尝试向控制器添加诸如render:json=>{:foo=>bar}之类的内容,因为在其他一些问题上,人们说必须呈现一些内容才能认为请求成功,但这并没有解决我的问题

_new_signin.html.haml
...
      .modal-body
        = form_for(resource, :as => resource_name,
                     :url => session_path(resource_name) ,
                     :html => {:id => "sign_in_user"},
                     :format => :json,
                     :remote => true ) do |signin_form|
          .form-group 
            = signin_form.label :email
            = signin_form.email_field :email, class: 'form-control'
          .form-group
            = signin_form.label :password
            = signin_form.password_field :password, class: 'form-control'
          .form-group
            = signin_form.label :remember_me
            = signin_form.check_box :remember_me
          .form-group
            = link_to "Forgot your password?", new_password_path(:user)
            = signin_form.submit "Sign in", class: "btn btn-primary"
/


您需要views/sessions/create.js.erb文件作为对ajax请求的响应

<% if current_user %>
  alert('Signed In');
<% else %>
  alert('error!');
<% end %>


为了避免在登录后重定向用户,让我澄清一下您的问题,这样您就可以选择适合自己的。每个操作都应该有一个数据响应类型,可以是html、js、json等等

首先,你需要改变

您需要用json响应的第二件事:

respond_to do |format|
    format.json { render :json =>  resource }
end
您可能还需要将表单更改为具有数据类型


要了解更多详细信息,请查看这篇文章,展示如何使用AJAX回调而不是.js.erb

我可以看到这是如何工作的,但我不明白为什么有必要这样做。我想使用.on'ajax:success'完成基本相同的事情,而不必创建.js.erb文件来渲染。根据铁路指南,这应该是可能的。
<% if current_user %>
  alert('Signed In');
<% else %>
  alert('error!');
<% end %>
sign_in_and_redirect(resource_name, resource)
sign_in(resource_name, resource)
sign_in_and_redirect(resource_name, resource)
sign_in(resource_name, resource)
respond_to do |format|
    format.json { render :json =>  resource }
end
= form_for(resource, :as => resource_name, :url => session_path(resource_name) :remote => true, :html => {:'data-type' => 'json'})