0

动作类和动作类中的以下ajax方法触发方法失败(所有堆栈跟踪都出现空指针异常);但我的 ajax 总是成功:函数。?请让我知道为什么会这样。我应该在我的 ajax 调用中改变什么?我需要提交吗?我只是想从行动中获取信息并获取成功。+ 下面的 ajax 调用点击不触发 IE 中的动作类。在 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>
4

1 回答 1

0

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

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

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

另一种选择是将信息放在您要发回的 JSP 中,例如,使用操作属性来确定一些 HTML 内容——因此不要在 JS 端这样做,而是在 JSP 中进行。或者完全返回不同的 JSP,可能嵌入/包括不改变的“常量”部分。

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

于 2013-05-17T02:05:29.143 回答