2012-04-17 66 views
0

我想知道如何处理使用jquery $ post从Struts2行动结果的错误。Struts 2的行动结果和jquery POST

举例来说,在我的strut2.xml我已经处理使用错误的以下内容:

<action name="helloWorld" class="net.roseindia.Struts2HelloWorld"> 
    <result="success">/pages/HelloWorld.jsp</result> 
    <result="error">/pages/HelloWorld.jsp</result> 
</action> 

在我的jQuery的电话,我有以下几点:

$.post("helloWorld", function(){ 

}).success(result){ 
    $("#div").html(result); 
}).error(){ 
    alert("ERROR"); 

}; 

即使结果等于错误,它总是成功。

那么我怎么能让结果=“错误”转到我的jquery调用中的$ .post错误?

回答

2

这是“成功”,因为不管什么“回来”,你将有一个AJAX成功的请求/响应。你需要做的是从servlet中设置一些“失败”通知,然后检查“成功”块中返回的内容。

“成功”表示请求返回了“2xx”代码。 “错误”是指非2xx成功:

更多的HTML代码在这里:http://www.w3.org/Protocols/HTTP/HTRESP.html

所以像这样的事情(不是有用的代码,但你会明白我的意思

$.post("helloWorld", function(){ 

}).success(result){ 
    if(result == some error condition) { this.error;} 
else { //process the success 
     $("#div").html(result); 
} 
    }).error(){ 
    alert("ERROR"); 

}; 

编辑:安东尼在下面发表评论说,由于用户在控制被请求的服务/页面 - 你可以用一种方式来构建servlet /代码,以返回一个html错误代码,而不是询问结果html - 这是一个很好的建议。谢谢安东尼

+1

“您需要做的是从servlet中设置一些”失败“通知,然后检查”成功“块中返回的内容。”为什么?如果你不能从Struts 2中返回一个错误状态代码,并且因此导致'.error()'回调函数被执行,我会非常惊讶。 – 2012-04-17 21:41:51

+0

返回的结果是一个html页面...所以我怎么能捕获这个结果==一些错误条件? – newbie 2012-04-17 21:41:58

+0

是否可以将结果与返回的页面名称进行比较?我很困惑 – newbie 2012-04-17 21:43:50