新手问题 ajax 报出错信息

liker · 2013年04月24日 · 最后由 liker 回复于 2013年04月25日 · 2977 次阅读

使用 ajax 弹出错误信息

<div id="myModal" class="modal hide fade" role="dialog" data-backdrop="false">
  <div class="modal-body1">
    <p><%= @snew %></p>
  </div>
</div>
      <%= form_for(:session, url: sessions_path) do |f| %>
          <table>
            <tr>
              <td><%= f.label :username %></td>
              <td class="span4"><%= f.text_field :username %></td>

            </tr>
            <tr>
              <td><%= f.label :password%></td>
              <td class="span4"><%= f.password_field :password %></td>

            </tr>
            <tr>
              <td><%= f.submit 'Sign in'%></td>
            </tr>
          </table>
      <% end %>

@snew是控制器的错误信息“用户名或密码错误” 这个怎么具体实现 无刷新报登陆错误信息

貌似用 ajax 写这个 form 的 submit 然后后台判断有问题返回错误信息 ajax 接受完在根据错误信息更新你的那个 p 标签吧?你用实力变量的话就不是 ajax 了啊要服务器才能处理你的 ruby code 大概~菜鸟一名说错误怪哈~

这个我也不太懂、、那个分页 ajax 都实现了 这个不会了、、、哎

JS/jquery写一个方法把form的submit拦截了,再以ajax方式带上参数请求对应的action。如果错误,可返回json一类的错误信息用以渲染;如果OK,则返回一个跳转链接再js操作一下即可。

#4 楼 @Rei 打不开这个网址、

#5 楼 @liker 虽然你可以等待别人发你一个不需要翻墙的教程,不过我建议你尝试自己解决这个问题,不然以后有很多资料都看不到。

#6 楼 @Rei 正在查找资料中、、不过你的 Rails 3.2 的 Ajax 向导 我以前就看到过 想进去看看 没进得去、

form 表单

<div id="myModal" class="modal hide fade" role="dialog" data-backdrop="false">
  <div class="modal-body1">
    <p>wrong</p>
  </div>
</div>
<%= form_for(:session, url: sessions_path, :html=>{:id => 'sess_form'}) do |f| %>
        <table>
          <tr>
            <td><%= f.label :username %></td>
            <td class="span4"><%= f.text_field :username, :id=>"us"%></td>

          </tr>
          <tr>
            <td><%= f.label :password %></td>
            <td><%= f.password_field :password, :id=>"pa" %></td>

          </tr>
          <tr>
            <td><%= f.submit 'Sign in' ,id: "tt" %></td>
          </tr>
        </table>
    <% end %>

jquery

$('#tt').click(function(){

          $.ajax({
              type: "post",
              url:'/sessions/create',
              data: {
                  username: $('#us').val(),
                  password: $('#pa').val()
              },
              success: function(data){
                if(data=="true"){
                  $('#sess_form').submit();
                }else{
                  $('#myModal').modal('show');
                  return false;
                }
              },
              error: function(){
                  alert($('#us').val());
                  return false;
              }
          });
      });

sessions action

def create
    #@flash = false
    login_name = params[:session][:username]
    users = User.find_by_sql ["select * from users where username = :username or email = :email or card_number = :card_number", {:username => "#{login_name}", :email => "#{login_name}", :card_number => "#{login_name}"}]
    user = users.first
    if user && user.authenticate(params[:session][:password])
      sign_in_hmp user
      render :text=>"true"
    else
      render :text => "false"
    end
  end

结果 总是 进入 error function 求指教

#8 楼 @liker 什么 error?(Rails log,浏览器监控返回数据)

error: function(XMLHttpRequest, textStatus){                       
                          alert(XMLHttpRequest.status);
                          alert(XMLHttpRequest.readyState);
                          alert(textStatus);
                      }

弹出 0 0 error

先问一下 这样的思路 对么?

#11 楼 @liker 2 个地方有问题。

  1. 绑定的是按钮的 click 事件,但是没有用 event.preventDefault() 阻止它的默认行为,所以在执行你的 function 之后表单会立即提交。建议绑 form 的 submit 事件并调用 event.preventDefault()
  2. success 的 callback 再次进行 submit() 意味不明。

报 404 4 error 没有找到 我感觉 离结果 不远了、、

controller 是 sessions action 是 create url 应该没错吧 怎么回报 404 错误啊?

#14 楼 @liker rake routes | grep sessions

#16 楼 @liker 自己找问题

404 改错 比较好改、、500 这个怎么改啊?

#18 楼 @liker

什么 error?(Rails log,浏览器监控返回数据)

login_name = params[:session][:username] 不好意思 刚出去了

#20 楼 @liker 自己找问题

#21 楼 @Rei 真心感谢!已解决 params[:session][:username] 出错了 应该是 params[:username]

需要 登录 后方可回复, 如果你还没有账号请 注册新账号