代码之家  ›  专栏  ›  技术社区  ›  Darren Greaves

根据验证错误从AJAX更新不同的div

  •  1
  • Darren Greaves  · 技术社区  · 16 年前

    我有一个通过AJAX提交的表单(使用原型和内置的rails'form_remote_tag'助手)。
    如果有表单验证错误,我想更新一个div(状态区域),但如果提交成功,则更新一个不同的div(表单所在的div)。

    我的代码看起来像这样:

    <div id="recipe-status"><!-- I want form validation errors to go here --></div>
    <div id="recipe">
        <%= form_remote_tag(:update => "recipe-status",
           :before => "Element.show('wait-indicator')",
           :success => "Element.hide('wait-indicator')",
           :complete => visual_effect(:appear, "recipe-status"),
           :url => { :action => 'import', :id => @recipe.id },
            :failure => "alert('Unable to import recipes at present')") %>
        <-- Form goes here, I want this to be replaced if the submit succeeds -->
    </div>
    

    我能想到的唯一方法是,如果存在验证错误,则返回HTTP错误状态,但这似乎有点像黑客。 有更干净的方法吗?

    2 回复  |  直到 16 年前
        1
  •  1
  •   mwilliams    16 年前

    我会查看最新的 Railscasts on jQuery 以及A older episode on RJS templates 。这些应该能让你很好地使用AJAX和Rails应用程序,并使一切正常、干净地运行,而不需要任何黑客攻击。

    在查看了您的代码后,我建议使用jQuery(见上文),您将从表单中提取所有javascript making it a lot less obtrusive (这是一件非常好的事情)。

    看来你已经掌握了这些技术,所以你会很快学会用jQuery编写不引人注目的Javascript,你很可能会用一个更干净的应用程序成为一个更快乐的人。 :)

    祝你好运

        2
  •  1
  •   Yardboy    16 年前

    正如另一个答案中提到的,我建议您考虑使用jQuery。然而,这肯定需要一些提升,所以坚持Rails的默认设置,这样你就可以更快地前进。..

    您要研究的是内联RJS。您可以在控制器内进行AJAX更新,而不是在form_remote_tag调用中执行所有操作。这样,您就可以管理是否存在验证错误的逻辑,并根据这一点执行一个或另一个AJAX更新(到任何div)。

    看见 this post by Jamis Buck 对于初学者来说。