jquery - Grails 远程函数 onSuccess 与 onComplete

标签 jquery ajax grails grails-2.0

我有以下 Grails 代码:

${remoteFunction(controller: 'myController', 
                     action: 'myMethod',
                     params: 'params',
                  onSuccess: 'mySuccessMethod(data);',
                 onComplete: 'myCompleteMethod();',
                     update: 'divName')};

我期望:

  • mySuccessMethod()myCompleteMethod() 在 Ajax 调用完成时分别调用一次

我得到的是

  • mySuccessMethod()立即调用一次
  • 当 Ajax 调用(最终)完成时
    • mySuccessMethod() 被调用第二次
    • myCompleteMethod() 被调用(一次)。

在查找此问题时,Ajax 建议使用 onsuccess,但 Grails 中的实现(即调用时)似乎有所不同。

有人可以解释一下吗?

  • 为什么 mySuccessMethod() 被调用两次?
  • 这是否意味着我们应该使用 onComplete 而不是 onSuccess,至少在 Grails 中是这样?

(已编辑:添加以下信息作为对附加信息请求的响应。)

从remoteFunction()调用生成的HTML如下(我添加了CR和空格以提高可读性):

jQuery.ajax({type:'POST',data:paramString,
                 url:'/<appname>/myController/myMethod',
                 success:function(data,textStatus){
                     jQuery('#divName').html(data);
                     mySuccessMethod(data);;
                 },
                 error:function(XMLHttpRequest,textStatus,errorThrown){
                 },
                 complete:function(XMLHttpRequest,textStatus){
                     myCompleteMethod();
                 }
             });;

来自 mySuccessMethod 的控制台日志包含以下数据:

  • 第一次调用:

    <div class="loading-content"/>
    
  • 第二次调用:

    <The actual expected response>
    

谢谢。

最佳答案

onComplete 每次 ajax 调用结束时都会调用,无论成功或失败或任何更新。但是onSuccess会在成功时被调用。这意味着您不能使用 onComplete 代替 onSuccess

请注意 - 从 jQuery 1.5 开始 - 底层 ajax 方法名称已更改:

  • success() 现在是 done()
  • error() 现在是 fail()
  • complete() 现在是 always()

在 Grails 3 中,现在必须直接使用 jQuery.ajax,因此这些新名称很重要。

关于jquery - Grails 远程函数 onSuccess 与 onComplete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22051526/

相关文章:

javascript - 不使用 CamelCasing 获取数据属性值

javascript - 使用ajax加载的html内容不会检测其他js函数

ajax - ajax 请求后 Symfony2 登录重定向

java - 排除从 Grails 中的查询中检索 'id'

php - 如何将渲染后的 PHP+HTML 代码导入到文本文件中?

javascript - 将样式添加到 textarea 的特定行

Javascript/JQuery 设置复选框的值,同时禁用其他复选框

javascript - 检查 div 在窗口中是否可见?

grails - 在旧版Java/JSP Web应用程序中使用Groovy/Grails

intellij-idea - 在Intellij中运行应用程序无法编译域-但是bootRun可以工作