我的网页上有以下javascript代码,它接受JSON输入并将其发布到服务器:
$('form').submit(function (e) {
e.preventDefault();
$.ajax({
type:'POST',
url:$(this).attr('action'),
data:$("#json").val(),
success:function (data, textStatus, jqXHR) {
alert('Successfull!');
},
error:function (jqXHR, textStatus, errorThrown) {
alert('Error ' + errorThrown);
},
contentType:"application/json",
dataType:'html'
});
});
服务器端POST方法如下所示:
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response run(final Foo foo) {
if(someCondition(foo)){
return Response.status(Response.Status.ACCEPTED).build();
}else{
return Response.status(Response.Status.BAD_REQUEST).build();
}
}
当我从网页提交表单并且方法验证失败并返回BAD_REQUEST时,JS方法会警告正确的错误输出。但是,如果POST方法返回ACCEPTED响应,那么我会在Web控制台调试器no element found
中获得成功警报以及HTML错误页面,页面中的文本为“HTTP状态405 - 方法不允许”。
之前以前工作正常,但我更新到jQuery到1.9.0版本,并开始收到此错误。如果我让客户端调用POST方法,那么我也没有错误。那么这里的问题是什么?如果我将dataType:'html'
更改为dataType:'json'
,那么我开始收到JSON.parse - unexpected end of input
错误,即使POST方法正确执行,我得到的警报也来自错误块。