ajax - 急于实现grails服务器端触发的对话框,或如何在AJAX调用后突破更新区域

标签 ajax grails controller yui modal-dialog

在grails中,我使用以下机制来实现所谓的条件服务器端触发对话框:提交表单时,数据必须首先由 Controller 处理。根据结果​​,必须是:a)在“旧”屏幕之前的模式是/否确认,或者b)重定向到替换“旧”屏幕的新 Controller / View (无需确认)。

所以这是我目前的方法:

  • 在原始 View 中,我有一个<g:formRemote name="requestForm" url="[controller:'test', action:'testRequest']", update:"dummyRegion">和一个被CSS
  • 隐藏的 <span id="dummyRegion">
  • 提交表单时,测试 Controller 会检查是否需要确认,如果需要,则使用旧界面前面的基于yui的对话框(包括"is",“否”按钮)渲染模板(该对话框可以正常工作,因为该对话框“来自” dummyRegion,不覆盖页面)。当按下"is"时,将调用其他右侧的 Controller 和操作并替换旧屏幕;如果按下“否”,则取消对话框,并且再次显示“旧”屏幕而不显示该对话框。效果很好,直到这里。
  • 提交表单时,测试 Controller 发现不需要确认,我通常会直接重定向到其他 Controller 和操作。但是问题在于该 Controller 的相应 View 没有出现,因为它也在不可见的dummyRegion中呈现。因此,我目前使用的是GSP模板,其中包含我呈现的javascript重定向。但是,浏览器通常不允许使用javascript重定向,我认为这不是一个干净的解决方案。

  • 所以(最后;-),我的问题是:如何获得 Controller 重定向以使相应的 View “脱离”我的AJAX dummyRegion,再次替换整个屏幕?

    或者:对于我的想法,您是否有更好的方法?但是请注意,我无法在客户端检查是否需要确认,因此需要进行服务器 call !另外,我想避免只刷新整个页面以弹出确认对话框(如果没有AJAX,这也是可能的)。

    感谢您的提示!

    最佳答案

    我知道,这不是一个“集成”解决方案,但您是否考虑过使用所选的某些JS库“手动”执行此操作(我个人选择的是jQuery,但其他任何已建立的库都可以做到这一点)?这样,您将不依赖于任何更新“区域”,但是可以在AJAX请求的响应处理程序中做任何您想做的事情(例如更新任何DOM元素)。

    只是一个想法。我的个人经验是,Grails中的“内置” AJAX / JS内容通常缺乏灵活性,而我总是以纯jQuery来完成所有工作。

    关于ajax - 急于实现grails服务器端触发的对话框,或如何在AJAX调用后突破更新区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2998986/

    相关文章:

    javascript - HTML 必需属性不适用于 AJAX 提交

    grails - grails/gradle如何在没有版本说明的情况下下载依赖项

    java - 数据库中数据类型大小的问题

    javascript - Backbone JS 多级导航示例

    python - 尝试使用 Flask 和 jquery 将实时传感器数据从 python 获取到 html,而不刷新整个页面

    javascript - 想要一个 javascript 函数每分钟运行一次,但最多运行 3 次

    date - Grails-字符串到日期的转换

    java - 通过 Java FX Controller 将数据传递到其他 View

    ruby-on-rails - 在 RSpec 测试中模拟子 uri

    javascript - ajax 请求在 OS X Paw 应用程序和 cURL 中工作,但不能像 Javascript/jQuery 那样工作