我有以下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
请注意,从jQuery1.5开始,底层ajax方法名称已经更改:
success()
现在是done()
error()
现在是fail()
complete()
现在是always()
有了Grails 3,现在必须直接使用jQuery.ajax,所以这些新名称很重要。