【问题标题】:Updating different divs from AJAX depending on validation errors根据验证错误从 AJAX 更新不同的 div
【发布时间】:2008-11-19 10:08:24
【问题描述】:

我有一个通过 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 错误状态,但这似乎有点像 hack。 有没有更清洁的方法呢?

【问题讨论】:

    标签: ruby-on-rails ajax prototype


    【解决方案1】:

    我会查看最新的Railscasts on jQueryolder episode on RJS templates。这些应该可以让您在 AJAX 和 Rails 应用程序中顺利运行,并使一切正常、干净地运行,而无需任何黑客攻击。

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

    您似乎掌握了这些技术,因此您将很快学会使用 jQuery 编写不显眼的 Javascript,并且您很可能最终会成为一个更快乐的人,拥有一个更干净的应用程序。 :)

    祝你好运!

    【讨论】:

    • 您是否建议我的函数返回 JSON 而不是模板?我确实认为这是一种解决方案,但将错误消息传回似乎很繁琐。还是你只是建议我从 Prototype 换成 JQuery?
    • 我建议换成 jQuery。不需要 JSON,观看我上面链接的 jQuery Railscasts,它基本上解释了您的任务所需的一切。
    • 酷,会的,谢谢你的帮助。我还是想看看 JQuery,所以这是一个很好的理由。
    【解决方案2】:

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

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

    请参阅this post by Jamis Buck 了解初学者。

    【讨论】:

    • 谢谢你 - 我不介意加速 - 无论如何,该网站不使用大量 AJAX。
    猜你喜欢
    • 1970-01-01
    • 2013-10-14
    • 2014-07-07
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多