表单提交后,Ajax调用父窗口

时间:2009-11-04 15:52:53

标签: javascript jquery forms grails dialog

请原谅复杂的头衔。这是我的情况:我正在使用Grails应用程序,并使用jQuery来处理一些更复杂的UI内容。

系统的设置方式,我有一个项目,可以有各种文件(用户提供)与之关联。在我的项目/节目视图中,有一个添加文件的链接。此链接弹出一个jQuery模式对话框,显示我的文件上传表单(远程.gsp)。

因此,用户选择文件并输入注释,并在提交表单时关闭对话框,并刷新项目/显示视图上的文件列表。我最初通过添加

来实现这一目标
onclick="javascript:window.parent.$('#myDialog').dialog('close');" 

到我的提交按钮。

这很好用,但是当提交一些较大的文件时,我最终会遇到竞争条件,对话框关闭,文件列表在保存新文件之前刷新,因此文件列表已过期(文件仍然可以正确保存。)

所以我的问题是,在表单提交操作完成之前,确保对话框没有关闭的最佳方法是什么?我试过用过     <g:formRemote&GT;在Grails中标记,并在“after”属性中关闭对话框(根据Grails文档,在表单提交后调用脚本),但是我收到一个错误(取自FireBug),说明

window.parent.$('#myDialog').dialog is not a function

这是一个我在这里缺少的简单的JavaScript / Grails语法问题,还是我完全错了?

非常感谢您的时间和帮助!

3 个答案:

答案 0 :(得分:0)

为了避免您提到的竞争条件,我会在提交的页面返回后运行“刷新文件列表”代码。我不熟悉Grails,但是这个psuedoCode应该给你一个想法:

if (file was uploaded successfully){
 print "<html>
  <body onload='code_refresh_file_list;window.parent.$(\"#myDialog\").dialog(\"close\");'>
     file uploaded successfully...
  </body>
 </html>";
}else{
 print "<html>
  <body>
     could not upload file due to [reason], please re-upload the file
  </body>
 </html>";
}

注意条件的第一部分上的body onload =''

希望有所帮助

答案 1 :(得分:0)

我是一个新手,不知道Grails,但我一直在做JQuery ajax调用,如下所示。看起来你似乎错了 - 忘记click事件并在从服务器返回文件已成功保存的响应后关闭对话框。

在下面的代码中,函数从服务器,字符串,json,等等接收回来的东西(这是响应),如果你愿意,你可以用它做一些事情,比如显示一条消息并关闭你的对话框。 / p>

   $('#myForm').submit(function() {
   $.post($(this).attr('action'), $(this).serialize(), function(response) {
          myDialog('close'); // pseudo code here
          $('message').html(response);
  });
  return false;
  });
顺便说一句,你可能完全接受JQuery并消除与你的HTML混合的javascript。

答案 2 :(得分:0)

可能是因为jquery模式的库在调用对话框关闭时无法使用。试试这个

  

jQuery(document).ready(function(){

  jQuery('#myDialog').dialog('close');
     

});