如何处理未定义体的响应?

时间:2014-10-01 15:04:24

标签: javascript jquery html ajax post

我理解我的问题是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"
}

5 个答案:

答案 0 :(得分:0)

状态代码确定jQuery将触发哪些功能(即completeerrorsuccess)。

所以,试试这个:

$.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处理程序 - 它将在调用successerror后运行。无论哪种方式,对于completeerror,第一个参数都是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 */ }
   }
});

这列在the documentation

答案 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');
   },
});