Ruby on rails 如何返回未经验证的AJAX/JSON表单进行更正?

Ruby on rails 如何返回未经验证的AJAX/JSON表单进行更正?,ruby-on-rails,ajax,json,forms,params,Ruby On Rails,Ajax,Json,Forms,Params,用户访问我的站点,填写AJAX/JSON表单 细分 我将json对象传递到外层空间 对象在我的控制器中失败 然后我的控制器加载第二个部分 然后当我点击并出现免责声明时 第二部分消失 我将json对象传递到外层空间。 $.ajax({ url: foo_url, data: dataString, type: "POST", dataType: '

用户访问我的站点,填写AJAX/JSON表单

细分

  • 我将json对象传递到外层空间
  • 对象在我的控制器中失败
  • 然后我的控制器加载第二个部分
  • 然后当我点击并出现免责声明时
  • 第二部分消失
  • 我将json对象传递到外层空间。

                $.ajax({
                    url: foo_url,
                    data: dataString,
                    type: "POST",
                    dataType: 'json',
                    success: function(data) {
    
    对象在我的控制器中失败

      respond_to do |wants|
        wants.json { render :json => {:errors => @card_signup.errors, :html => (render_to_string :partial => '/card_signups/new_form') } }
      end
    
    然后我的控制器加载第二部分。

                $.ajax({
                    url: foo_url,
                    data: dataString,
                    type: "POST",
                    dataType: 'json',
                    success: function(data) {
    
    这有效地隐藏了第一个,并将新的放在上面。我不知道这在代码中是如何发生的,也不知道发生在什么地方,它只是因为控制器调用了它

    然后当我单击并出现免责声明时

    当免责声明出现时,最新的表单完全消失,只留下未经验证的旧表单。同样,系统中没有任何代码要求这样做,这只是应用程序在加载两个表单并失败时所做的

    按发送

    它试图注册唯一的表单(失败的表单),而整个应用程序失败

    大问题:

    如何至少停止对象渲染两次,并使其更新窗体。这几乎可以解决整个问题


    基本上,我不是告诉它重新呈现新表单,而是告诉它如何返回包含错误的旧表单?

    如果没有更多的代码,我真的无法理解为什么您的表单会消失,但关于我的评论,这里是这样的。 在提交ajax表单时,将数据发送到服务器进行验证。如果数据有效,则向客户端发送一个带有status属性的json对象。如果数据无效,则向客户端发送相同的json对象,其中包含status属性和另一个将保存错误消息的属性。应该是这样的:

    // validation ok
    response = {status: 'ok'}
    
    // validation errors
    response = {status: 'error', msg: 'Invalid username<br />Invalid email addres...'}
    
    //验证正常
    响应={状态:“确定”}
    //验证错误
    响应={状态:“错误”,消息:“无效用户名
    无效电子邮件地址…”
    在客户端,检查响应的状态属性。如果等于“ok”,则执行某些操作,否则将response.msg附加到页面上的任何容器元素

    我希望我说清楚了。
    祝您好运

    查看发布表单并处理返回的JSON数据的JavaScript代码会有所帮助

    我有点同意Vlad的观点,即不返回表单的整个HTML,而是编写一些JavaScript代码来显示现有表单上的错误消息。这实际上就是我处理它的方式,但是如果您想将JavaScript保持在最低限度,您可以执行以下类似操作:

    在您的页面上,这应该来自您的新表格部分:

    <form id="my_form">
      ....
    </form>
    

    为什么要重新创建表单?如果使用ajax提交数据,表单仍然存在。您可以仅返回相应的错误消息,并仅动态突出显示错误的输入fields@Vlad,这太奇怪了,因为额外的表单实际上不见了。因此,在第一次之后创建的任何东西都会消失。不确定在新渲染后会发生什么。另外,你提到的是我正在寻找的答案,我只是不知道如何实现这个想法。你能给我指个方向吗?有道理,我明白了。但它真的没有任何适用的意义。我被困住了..我怎么才能访问JSON对象呢。它似乎完全消失了。巫师!没有错误。它发布的很好,系统说它所有的错误,但是因为AJAX请求至少通过了,所以它被认为是“通过了”。啊,好的,这很有效。我发现了jQuery的隐藏部分,它让我的代码的其余部分感觉像垃圾。谢谢