在AJAX响应中返回JSP?

时间:2013-12-30 11:56:04

标签: java javascript jquery jsp struts2

我有一个Action类,它有一个调用Bean的方法,并根据一些输入在DB中设置一些数据。

动作类

try{
    slsConfigureTspThresholdRemote = this.getSlsConfigureTspThresholdRemote();
    slsConfigureTspThresholdRemote.setThresholdParameters(circleId, tspId, thresholdTypeFlag, thresholdParametersList);
}
catch (Exception e){    
    addActionError(e.getMessage());
    e.printStackTrace();
    System.out.println("[AnalysisStatisticsAction] updateThresholdParameters: In catch Inside Constructor!!");
    return ERROR;
}
return DISPLAY;

如果有ERROR我返回Error.jsp,其中显示actionError,如果DISPLAY则返回相同的输入页面。

strust.xml

<action name="updateThresholdParameters"
            class="cdot.oss.cmsat.gma.struts.ConfigureTspThresholdAction" method="updateThresholdParameters">

            <result name="display">pages/ConfigureTspThresholdInput.jsp</result>
            <result name="error">pages/Error.jsp</result>

        </action>

我使用strust2-json-plugin。我正在进行AJAX通话。

JS

 $.ajax({
                type: 'POST',
                traditional: true,                  
                url: '/gma/updateThresholdParameters.action',
                data:
                {
                    circleId: circleId,
                    tspId: tspId,
                    thresholdTypeFlag: thresholdTypeFlag,
                    thresholdParameters: thresholdParameters
                },
                success: function(data){
                     alert('Updated DB');
                },
                error:function(data){
                    alert("something is not fine!!!");
                }
         });

因此,如果数据在数据库alert('Updated DB')中更新,或者如果是异常,那么我希望我的Error.jsp加载到ErrorDiv

所以问题是:

如果我的data没有发生异常,则会返回ConfigureTspThresholdInput.jsp,如果出现异常,则会在数据中返回Error.jsp。我应该如何区分数据中的哪个jsp,以便在alert('Updated DB')中相应地Error.jsp或加载errorDiv

我尝试在线搜索。我阅读了JSON插件的statusCodeErrorCode,但是我不知道数据部分是如何填充的(我提醒并获得了一个XML文档)。

编辑:从答案中我猜人们误解了这个问题。所以,让我说清楚。

当我说异常时,我并不是说AJAX请求本身无法完成或失败。

我的意思是如果bean中有异常,我会返回error,并相应地在strust.xml中返回Error.jsp。 所以我知道控件将来到AJAX请求的success。到达那里后如何处理2 JSP?

3 个答案:

答案 0 :(得分:0)

使用以下代码跟踪ajax调用中的异常:

    $.ajax({
                type: 'POST',
                traditional: true,                  
                url: '/gma/updateThresholdParameters.action',
                data:
                {
                    circleId: circleId,
                    tspId: tspId,
                    thresholdTypeFlag: thresholdTypeFlag,
                    thresholdParameters: thresholdParameters
                },
                success: function(data){
                     alert('Updated DB');
                },
                error:function(data){
                    alert("something is not fine!!!");
                }
         });

答案 1 :(得分:0)

我不是100%确定我理解你的问题。我得到的是:

如果没有错误且一切顺利,您希望您的网站提醒“已更新的数据库”; 否则您希望您的网站显示错误页面?

您应该使用HTTP状态代码报告请求是好还是坏。使用状态代码5XX表示服务器错误。 (http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

当您的ajax请求收到错误状态代码时,它将调用错误函数:

$.ajax({
        type: 'POST',
        traditional: true,                  
        url: '/gma/updateThresholdParameters.action',
        data:
        {
            circleId: circleId,
            tspId: tspId,
            thresholdTypeFlag: thresholdTypeFlag,
            thresholdParameters: thresholdParameters
        },
        success: function () {
            alert("DB updated")
        },
        error: function () {
            Redirect to your error page instead of returning it.
        }
    });

我希望这就是你想要的。

答案 2 :(得分:0)

您应该使用Shorthands来保持代码清洁。

$('#OkDiv').load('/gma/updateThresholdParameters.action',{
  circleId: circleId,
  tspId: tspId,
  thresholdTypeFlag: thresholdTypeFlag,
  thresholdParameters: thresholdParameters
},function(a,c,xhr){if(c=='error')$('#ErrorDiv').html(xhr.responseHTML);});
  1. 自动POST
  2. 自动传统
  3. 自动替换