我有以下Grails代码:
${remoteFunction(controller: 'myController',
action: 'myMethod',
params: 'params',
onSuccess: 'mySuccessMethod(data);',
onComplete: 'myCompleteMethod();',
update: 'divName')};
我希望:
mySuccessMethod()
和myCompleteMethod()
将被调用一次我得到的是
mySuccessMethod()
会立即调用 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>
感谢。
答案 0 :(得分:4)
onComplete
都会调用,即使它成功或失败或任何更新。但是onSuccess
在成功时被调用。这意味着您无法使用onComplete
代替onSuccess
请注意 - 从jQuery 1.5开始 - 底层的ajax方法名称已更改:
success()
现在是done()
error()
现在是fail()
complete()
现在是always()
使用Grails 3 jQuery.ajax现在必须直接使用,所以这些新名称很重要。