ajax没有从Struts2动作类中捕获实际响应

时间:2013-05-16 22:02:12

标签: jquery ajax struts2 action

动作类和动作类中的以下ajax方法触发方法失败(带有所有stacktrace的空指针异常);但是我的ajax总能成功:功能。请让我知道为什么会这样。我的ajax电话应该​​改变什么?我需要提交;我只是试图从行动中获取信息并获取成功。 + 下面的ajax调用IE中的Click not firing action class。在Firefox中运行良好。

这是行动类中的方法。

public String pullData() {

    try {
        logger.debug("Pulling Data..!");
        data.getInformation();  -> //throws null pointer exeption.
        return SUCCESS;
    } catch (Exception e) {
        this.LOG.warn("Error while trying to execute quartz job: " + e);
        e.printStackTrace();
        return ERROR;
    }
}

JSP

<input id="pullDataButton" class="button" type="button" value="Pull"  /> 

ajax方法

$("#pullDataButton").click(function() {
    $.ajax( {
      traditional: true,
      type: "POST",      
      url: "PullData.action",
      async: true,
      success: function(response) {
          $('#placeHolder').html('Data Pulled!').css({color:'green'});
      },
      error: function(e) { 
          $('#placeHolder').html('Data Pull Failed!').css({color:'red'});
      }       
    });
}); 

struts.xml中

<action name="pullData" method="pullData" class="com.pay.code.PullDataAction">
        <result name="input">mainInfo.jsp</result>
        <result name="error">mainInfo.jsp</result>
        <result name="success">mainInfo.jsp</result>
    </action>

1 个答案:

答案 0 :(得分:0)

除非您返回错误代码,否则JavaScript代码无法知道发生了什么错误 - 您正在返回正常的请求结果。 JS 主要捕获来自S2的实际响应,您可以通过使用Firebug或其他浏览器开发工具查看响应来证明。

我不记得当前的调度程序结果是否允许设置HTTP响应代码 - 如果是,则将其设置为错误。如果没有(我不相信它),你可以破解现有的结果类型以允许设置代码 - 如果你特别需要HTTP错误响应(或其他)代码,那就是我所做的。

另一种选择是返回JSON并使用JSON的内容来确定错误状态和新的DOM内容,并在客户端做更多的工作。

另一种选择是将信息放在您要发回的JSP中,例如,使用action属性来确定一些HTML内容 - 所以不要在JS端执行,而是在JSP中执行。或者一共返回不同的JSP,可能嵌入/包含不变的“常量”部分。

最佳选择取决于您的技能和要求。