Javascript 使用JS或jQuery提交表单时处理500个错误?
我使用标准表单/动作发布到restful web服务,由于表单的大小和组成,我尽量不使用ajax。是否有方法将错误处理附加到表单提交?请参阅下面我的当前代码Javascript 使用JS或jQuery提交表单时处理500个错误?,javascript,jquery,post,Javascript,Jquery,Post,我使用标准表单/动作发布到restful web服务,由于表单的大小和组成,我尽量不使用ajax。是否有方法将错误处理附加到表单提交?请参阅下面我的当前代码 <form id="theForm" action="rest/url" method="post" enctype="multipart/form-data"> </form> $("#theForm").submit(function(e){
<form id="theForm"
action="rest/url"
method="post"
enctype="multipart/form-data">
</form>
$("#theForm").submit(function(e){
// Can anything be done to handle 500s here?
});
试试这个:
<form method="post" id="form>
</form>
请注意,您无法处理正常的提交过程!HTTP响应只能检查ajax请求。无法处理简单表单提交
您可以点击提交按钮执行上述代码
不想使用Ajax?
如果不想使用ajax,则需要使用服务器端代码。并检查来自服务器的HTTP响应!如果是500,则将用户重定向到另一个页面!但是请记住,不能使用jQuery检查默认提交过程的HttpResponseCode
如果您开始学习
web.config
,效果会更好。在该文件中,您可以管理错误以及服务器如何响应错误和其他条件的其他自定义操作。您可以这样处理每种类型的Ajax错误
$(function() {
$.ajaxSetup({
error: function(jqXHR, exception) {
if (jqXHR.status === 0) {
alert('Not connect.\n Verify Network.');
} else if (jqXHR.status == 404) {
alert('Requested page not found. [404]');
} else if (jqXHR.status == 500) {
alert('Internal Server Error [500].');
} else if (exception === 'parsererror') {
alert('Requested JSON parse failed.');
} else if (exception === 'timeout') {
alert('Time out error.');
} else if (exception === 'abort') {
alert('Ajax request aborted.');
} else {
alert('Uncaught Error.\n' + jqXHR.responseText);
}
}
});
});
经过更多的阅读,我发现这是可能的使用FormData对象。这甚至可以解决多重选择问题。代码如下:
<form id="theForm">
<input name="text" type="text">
<select name="fileType">
...
</select>
<input name="file" type="file">
</form>
泽西岛资源
@POST
@Path("/save")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void save(
@FormDataParam("text") String text,
....
@FormDataParam("file") InputStream inputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail){
log.info(fileDetail.getFileName());
// exceptions return 500
throw new ServerException(500);
}
如果表单是正常提交的,则无法使用javascript处理错误。“我正在尝试不使用ajax”不,我认为您无法处理任何类型的错误,因为您正在将表单提交到另一个页面,除非您将表单提交到iframe。然后,您可以侦听iframe load事件并检查其内容,以查看是否是错误页或其他内容。@Half_Duplex仍然无法执行任何操作,因为500错误将完全出现在另一个文档上。请注意,如果您正在发布文件,您将无法使用jquery的序列化方法。我不想在这个特定表单中使用ajax,而且我已经在页面上其他地方使用ajaxSetup来实现ajax。谢谢,但我的目标是用一个创造性的替代方案来替代此表单中的ajax。我知道配置和服务器端是如何工作的,我编写了后端以返回500。我不想对任何回应、成功或失败进行重定向。我知道我可以使用jQuery暂停/转移表单提交,似乎应该有办法避免页面刷新。
<form id="theForm">
<input name="text" type="text">
<select name="fileType">
...
</select>
<input name="file" type="file">
</form>
$("#theForm").submit(function(e){
e.preventDefault();
var theForm = new FormData($(this)[0]);
$.ajax({
url: '.../rest/save',
type: 'POST',
data: theForm,
cache, false,
contentType: false,
processData: false
});
return false;
});
@POST
@Path("/save")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void save(
@FormDataParam("text") String text,
....
@FormDataParam("file") InputStream inputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail){
log.info(fileDetail.getFileName());
// exceptions return 500
throw new ServerException(500);
}