【问题标题】:when onFailure will call - ${remoteFunction -Grails当 onFailure 将调用 - ${remoteFunction -Grails
【发布时间】:2014-01-29 10:36:17
【问题描述】:

我的代码是这样的:

${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 什么时候会调用吗,如果状态为假,我该如何调用它。

【问题讨论】:

    标签: grails gsp


    【解决方案1】:

    方法

    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>
    

    在数据中,您可以找到呈现的响应。问候

    【讨论】:

    • 我试过了,但是 javascript 控制台 sais 'data is not defined'
    【解决方案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 回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多