【发布时间】:2014-03-29 21:06:30
【问题描述】:
我有以下 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>
谢谢。
【问题讨论】:
-
@dmahapatro:我不明白你的评论。你说的相关联是什么意思?这不是 try/catch/finally 问题。这是一个 Grails 包装的 jQuery/Ajax 调用。
-
它不应该被 Grails
remoteFunction调用两次。页面上发生了其他事情。你能发布remoteFunction调用生成的HTML吗? -
@aldrin:我在上面添加了生成的 HTML。谢谢。
-
谢谢。生成的代码看起来很好。页面中的其他东西肯定在调用该方法吗?
-
@aldrin:非常感谢。你的问题帮助我找到了原因。当我看到上面第一次调用的数据时,它让我意识到“加载内容”类是我们项目内部的一个 CSS 类。事实证明,有人添加了代码来拦截 Ajax 调用,并将此响应作为中间进程注入以显示微调器。鉴于问题出现在我正在处理的项目内部,我应该如何处理这个 Stack Overflow 问题?自己回答?将问题关闭为无效?你想回答,我会接受吗?再次感谢。
标签: jquery ajax grails grails-2.0