2

没有remote: true我的表格,登录就可以了。但是,当使用remote: true并尝试通过 ajax 登录时,我收到此错误:

You need to sign in or sign up before continuing.

请求都是邮寄的。有人可以启发我吗?

4

1 回答 1

4

您需要遵循一些步骤:

1)检查发出的请求是否是javascript。

要验证您是否应该检查请求标头以查看 Accept 参数是什么。如果它说,application/javascript那么一切都很好。使用 firebug 等工具轻松检查请求标头。

2) 包含哪些 javascript 文件?

其次,开始尝试时一个非常常见的问题:remote => true是所需的javascript 库未包含在您的代码中。所以我的猜测是您的布局中缺少以下代码:

<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>

如果是这种情况,只需将其包含在 html 标头中。

3) 检查控制器:它是否有一个 respond_to 块?

如果您使用 生成您的应用程序rails generate scaffold,它将具有类似的内容

 respond_to do |format|
      format.html
      format.xml  { .... }
    end

将上面的代码替换为:

respond_to :html, :js

或者

respond_to do |format|
      format.html
      format.js
      format.xml  { .... }
    end

4) 在你的 application.js 中设置 CSRF Token

$(function(){
  $.ajaxSetup({
    beforeSend: function( xhr ) {
      var token = $('meta[name="csrf-token"]').attr('content');
      if (token) xhr.setRequestHeader('X-CSRF-Token', token);
    }
  });
});

5) 发布您的登录信息

$.ajax({
  url: '/users/sign_in.json',
  type: 'POST',
  dataType: 'json',
  data: {user: {email: 'email@example.com', password: 'password'}},
  success: function(data, textStatus, xhr) {
    //called when successful
  }
});
于 2013-02-04T11:04:48.100 回答