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

时间:2011-10-10 14:26:23

标签: ruby-on-rails ajax json forms params

用户访问我的网站,填写一份AJAX / JSON表格。

BreakDown

  1. 我将json对象传递给外层空间。
  2. 比我的控制器中的对象失败,
  3. 然后我的控制器加载第二个部分。
  4. 然后当我点击并显示免责声明时,
  5. 第二部分消失。
  6. 我将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
    

    然后我的控制器加载第二个部分。

    这有效地隐藏了第一个,并将新的一个放在首位。不知道在代码中如何或在何处发生这种情况,它只是因为控制器调用它而发生。

    然后点击并显示免责声明

    当免责声明出现时,最新的表单完全消失,只留下旧的未经验证的糟糕表格。同样,系统中没有代码说这样做,它只是应用程序在加载两个表单时所做的事情,并且失败了。

    按发送

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

    大问题:

    我怎样才能至少停止对象呈现两次,并且只是让它更新表单。这应该可以解决整个问题。

    基本上不是告诉它再次渲染new_form,而是如何告诉它只返回带有错误的旧表单?

2 个答案:

答案 0 :(得分:1)

没有更多的代码,我无法弄清楚为什么你的表格消失了,但是关于我的评论,这里有。 在ajax表单提交上将数据发送到服务器进行验证。如果数据有效,则向客户端发送带有status属性的json对象。如果数据无效,则向客户端发送具有status属性的相同json对象和将保存错误消息的另一个属性。它应该是这样的:

// validation ok
response = {status: 'ok'}

// validation errors
response = {status: 'error', msg: 'Invalid username<br />Invalid email addres...'}

在客户端检查响应的状态。如果等于'ok'做某事,否则将response.msg附加到页面上的任何容器元素

我希望我清楚自己。 祝你好运

答案 1 :(得分:1)

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

我有点同意Vlad你不会返回表单的整个HTML,而是编写一些JavaScript代码来显示现有表单上的错误消息。这实际上就是我如何处理它,但如果你想把JavaScript保持在最低限度,你可以做类似以下的事情:

在您的网页上,这应该来自您的new_form部分:

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

您的javascript提交表单并处理回调:

    $.ajax({
      url: foo_url,
      data: dataString,
      type: "POST",
      dataType: 'json',
      success: function(data) {
            if (data.errors) {
              $("#my_form").html(data.html); // replace old form
            }
            else {
              // Everything was OK, so do something here.  Perhaps reset the form?
            }
        }
    });