我理解我的问题是jQuery试图将响应的主体解析为json,但是主体是未定义的,因此会抛出错误。
我无法改变回复。这是Jenkins服务器的默认响应。它在标题中发送201,404或500,我想处理它。
我的ajax:
$(document).ready(function () {
$('#reviewForm').bootstrapValidator({
...stuff...
...validation...
})
.on('success.form.bv', function (e) {
// Prevent form submission
e.preventDefault();
// Get the form instance
var $form = $(e.target);
// Use Ajax to submit form data
$.ajax({
type: 'POST',
url: url+$form.serialize(),
dataType: 'text',
complete: function() {
alert("Success.");
},
error: function(xhr, status, text) {
alert("failure");
}
});
尽管帖子成功(201创建),但由于未定义的主体导致语法错误,它仍会出现错误。
我很乐意处理错误中的错误:ajax的一部分,但我不知道我的生活如何从响应的标题中获取状态代码。
就像我说的那样,如果可以,我会改变回应,但它只是Jenkins的工作方式。
谢谢。
编辑:响应标题
Status Code: 201 Created
Connection: Keep-Alive
Content-Type: text/plain; charset=UTF-8
Date: Wed, 01 Oct 2014 14:51:12 GMT
Keep-Alive: timeout=15, max=100
Location: https://jenkins....
Server: Jetty(8.y.z-SNAPSHOT)
Transfer-Encoding: chunked
这是xhr(xml http响应)
{
"readyState": 0,
"status": 0,
"statusText": "error"
}
答案 0 :(得分:0)
状态代码确定jQuery将触发哪些功能(即complete
,error
或success
)。
所以,试试这个:
$.ajax({
type: 'POST',
url: url,
dataType: 'text',
complete: function(response) {
console.log(response);
});
将来,这将允许您更好地调试。 (通过您的检查元素控制台)
但是,在此示例中,状态代码将位于
中 response.status
error
功能会触发任何不是200的东西 - 所以你最好只使用 完整的功能,只需将你的错误放入default
声明的switch-case
块...
[...]
complete: function(response){
switch(response.status){
case 201:
alert("success"
break;
default:
alert("Something unexpected occurred");
break;
}
答案 1 :(得分:0)
只需使用complete
处理程序 - 它将在调用success
或error
后运行。无论哪种方式,对于complete
和error
,第一个参数都是jqXHR
对象,它具有status
属性,可以为您提供响应的状态。
$.ajax({
type: 'POST',
url: url,
dataType: 'text',
complete: function(xhr) {
//this handler runs regardless of success or error
//query xhr.status for the response code
}
});
答案 2 :(得分:0)
如果我的意思是这个,你想检查服务器的响应(201,200,500):
也许使用.awlways()
$.ajax({
type: 'POST',
url: url,
dataType: 'text',
always: function(status){
alert(status);
}
});
或者你可以在xhr对象上使用getAllResponseHeaders()
吗?
答案 3 :(得分:0)
您可以对状态代码进行特定回调,例如:
$.ajax({
...
statusCode: {
201: function() { /* I received a 201 */ },
404: function() { /* I received a 404 */ },
500: function() { /* I received a 500 */ }
}
});
中
答案 4 :(得分:0)
您可以使用statusCode
$.ajax({
type: 'POST',
url: url,
statusCode: {
200: function (response) {
alert('200');
},
201: function (response) {
alert('201');
},
404: function (response) {
alert('400');
}
}, success: function () {
alert('Success');
},
});