我的代码是:
${remoteFunction(controller:'user', action:'clearCache',
params:'\'&cacheUserId=\' + cacheUserId + \'&pageName=\' + pageName',
onSuccess: 'onSuccess()',
onFailure: 'onFailure()') };
在我的控制器操作方法
中clearCache(){
def status = getBusiness(); // this method returns boolean only.
if(status==true){
render "Success"}
else render "Failure"
}
新的它总是调用onSuccess()javascript函数。
所以我删除了else块然后在状态为false的情况下不调用onFailue / onSuccess。
我可以知道onFailure何时会打电话,如果状态为假,我该如何拨打电话。
答案 0 :(得分:2)
方法
onSuccess (optional) - The JavaScript function to call if successful
表示如果您的控制器成功(如此代码中),则称为
onFailure (optional) - The JavaScript function to call if the call fails
表示如果控制器出现故障(示例中为ERROR 404),则称为
这就是你的代码中始终调用onSuccess的原因。
解决方案我认为你可以传递给你的onSuccess函数数据参数:
<script type="text/javascript">
function onSuccess(data,textStatus){
alert(data)
}
</script>
在数据中,您可以找到呈现的响应。此致
答案 1 :(得分:2)
您应该更改控制器代码,以便在发生“异常”时显式发送相应的HTTP状态代码。 render
方法允许通过status
属性。
clearCache(){
def status = getBusiness(); // this method returns boolean only.
if(status==true){
render "Success" // implicit status of 200
}
else render(status: 403, text: "Failure")
}
由于不清楚在这个例子中发生了什么样的失败,我不确定要指定哪个状态代码,所以我已经使用了403,但你需要阅读status code definitions并选择最好的一个适合您的情况。
正如@alessandro所说,onSuccess
由2XX HTTP状态代码触发,大多数其他代码将触发onFailure
回调。