【问题标题】:Ajax call always calls success response functionAjax 调用总是调用成功响应函数
【发布时间】:2015-11-12 06:49:34
【问题描述】:

我想使用基于“成功”或“失败”的 ajax 调用从 struts.xml 返回两个不同的 jsp 页面。

我的 ajax 方法是:

$.ajax({
  url: url,
  success: function(data) { 
        $('#page-area').html("");   
        $('#page-area').html(data);             
        $('#modal_new-pack').modal('show');     
  },
  failure: function(data) { 
        $('#page-area').html("");   
        $('#page-area').html(data);             
  },
  cache: false
});

我的 struts.xml 是:

<action name="modify" class="com.test.ennt.action.CorporateAction"
            method="modify">
    <result name="success">/jsp/VF_ManageSuccess.jsp</result>
    <result name="failure">/jsp/VF_ManageError.jsp</result>
</action>

动作方法是:

public String modify() {
        corporate = corporateManager.getCorporate(getCorporateID());
        if (corporate == null) {
            return "failure";
        }
        this.disable = "true";
        return "success";
    }

根据我的操作方法的返回值和 struts.xml 失败/成功结果,我需要显示我的 jsp 页面。 但是 ajax 总是运行“成功”响应函数。

【问题讨论】:

  • 仅供参考,失败关键字不是failure,而是error
  • 您的函数返回失败或成功。在这两种情况下,它实际上都在返回一些东西。这意味着,如果它返回一些东西,那么 ajax 调用就是成功的。 ajax 调用中的 failures 关键字为真,当 ajax 调用不成功时,当调用的函数 (modify()) 不可用或网络连接错误时会发生这种情况。顺便问一下,你是奥里亚语吗? @rojalinbiswal
  • 给你一个赞成票。这个问题将帮助其他人消除他们的困惑。
  • 对,没错,ajax调用失败时返回错误。
  • 我已经删除了我的答案,因为我不太了解 struts。只需打开您的 Web 控制台,运行您的代码,然后查看您得到的响应是什么。这应该告诉您在 success 回调中寻找什么(它会向您显示 HTTP 响应代码,如果它是 200 则表示成功响应并将调用 success 处理程序;如果不是,它将触发调用到error(不是failure)处理程序)。

标签: jquery ajax struts2


【解决方案1】:

你做错了,你回复的消息都将跳转到成功方法。

你可以处理结果。

例如:

$.ajax({
  url: url,
  success: function(data) { 
     if(data=="success"){
        $('#page-area').html("");   
        $('#page-area').html(data);             
        $('#modal_new-pack').modal('show');   
     }
     else
     {
        $('#page-area').html("");   
        $('#page-area').html(data);
     }  
  }
  cache: false
});

【讨论】:

    【解决方案2】:

    当服务器发生错误时,调用错误函数。不取决于您返回的值。

    $.ajax({
      url: url,
      success: function(data) { 
          if($.trim(data) === 'success'){
                $('#page-area').html("");   
                $('#page-area').html(data);             
                $('#modal_new-pack').modal('show');     
          } else {
                $('#page-area').html("");   
                $('#page-area').html(data);
          }
      },
      error: function() { 
          alert('Error')
      },
      cache: false
    });
    

    【讨论】:

    • 您好,感谢您的回复。但是我的 $.trim(data) 是 jsp 页面内容,它怎么可能与“成功”相同,它永远不会相同。我检查了 data.success 但这将是未定义或成功
    • @rojalinbiswal 嗨,您尝试使用 alert/console.log 获取数据了吗?
    • 是的,我已经尝试过我的 jsp 页面内容。所以我需要更改struts.xml中的结果类型
    【解决方案3】:

    在$.ajax中失败确实意味着http错误状态

    • HTTP 状态代码 100-101 - 信息状态代码
    • HTTP 状态代码 200-206 - 成功状态代码
    • HTTP 状态代码 300-307 - 重定向状态代码
    • HTTP 状态代码 400-416 - 客户端错误状态代码
    • HTTP 状态代码 500-505 - 服务器错误状态代码

    我认为两个jsp VF_ManageSuccess.jsp 和VF_ManageError.jsp 都是返回http 状态码200;

    【讨论】:

      猜你喜欢
      • 2021-01-11
      • 2017-01-21
      • 2012-07-27
      • 1970-01-01
      • 2015-05-07
      • 2023-03-08
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多