如果用户没有输入正确的字符串,则尝试失败。 很好
我唯一的问题是我想将异常发送到ajax中的error函数。 ATM正在向它发送成功。
如何触发某种错误,以便将其发送到ajax中的错误函数?
public static String call(String input) {
try {
//doesn't matter. it will fail this try
}
} catch (Exception e) {
return e.getMessage(); // I want to send this to the error function in ajax
}
return "Good job";
}
AJAX
$.ajax({
url: '/call',
type: 'get',
data: {input: input},
success: function (resultString) {
//it sends to here instead of error
},
error: function () {
// i want to see it here
}
})
答案 0 :(得分:1)
这个问题依赖于用例,因为正确答案取决于错误类型,业务规则和其他因素,如信息曝光..但要尝试向您发送正确的方向,您需要发送HTTP错误代码,可能是https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400
中的400这是一个servlet如何做到的例子(这也是依赖于案例的,因为使用的方法取决于你的后端技术):
catch ( MalformedFileUriException e ) {
response.setStatus( HttpServletResponse.SC_BAD_REQUEST );
log.warn( "...", e );
}
catch ( UnsupportedLocaleException e ) {
response.setStatus( HttpServletResponse.SC_BAD_REQUEST );
log.warn( "...", e );
}
catch ( Exception e ) {
response.setStatus( HttpServletResponse.SC_INTERNAL_SERVER_ERROR );
log.error( "...", e );
}
答案 1 :(得分:0)
public static String call(String input) {
try {
//doesn't matter. it will fail this try
}
} catch (Exception e) {
echo json_encode(array("status"=>false,"msg"=>e.getMessage())); // I want to send this to the error function in ajax
}
echo json_encode(array("status"=>true,"msg"=>"Good job"));
}
$.ajax({
url: '/call',
type: 'get',
data: {input: input},
success: function (resultString) {
var d = $.parseJSON(resultString);
if(d.status){
//do stuff
}else{
alert(d.msg);//Your alert message
}
}
})
AJAX没有捕获服务器在错误函数中抛出的错误。您需要手动执行此操作以让AJAX知道它是成功还是错误。您需要使用json_encode并将状态设置为true或false。
检查您的AJAX,如果状态为false,则表示从服务器抛出错误。
PS - 我不知道JAVA中的json_encode语法,所以我使用了PHP的语法。请更换它。但是你会从中得到这个想法。
答案 2 :(得分:0)
当AJAX调用成功完成或失败时,会执行ajax 成功 或 错误 。所以基本上它并不关心你从后端返回什么结果。如果您的后端无法返回任何数据,则只有AJAX才会遇到 ERROR 块。因此,如果您想要区分返回数据的try块和返回数据的错误块,则必须在AJAX的 success 部分中应用一些逻辑。 所以我的方法是将数据作为文本和值的列表而不是字符串发送。当后端从try块返回数据时,可以将[text]部分设置为“OK”,否则在catch块返回的情况下可以将[text]块设置为“Error”。列表的[Value]将是所需的值。 所以结论使用list<>代替字符串作为返回类型,并根据需要设置[Text]和[Value]字段。