当onFailure会调用 - $ {remoteFunction -Grails

时间:2014-01-29 10:36:17

标签: grails gsp

我的代码是:

${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何时会打电话,如果状态为假,我该如何拨打电话。

2 个答案:

答案 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回调。