How to get the jQuery $.ajax error response text?

PhpJavascriptJqueryAjaxError Handling

Php Problem Overview


I am sending an error response to my jQuery. However, I can not get the response text (in the example below this would be Gone to the beach)

The only thing jQuery says is 'error'.

See this example for details:

php

<?
    header('HTTP/1.1 500 Internal Server Error');
    print "Gone to the beach"
?>

jQuery

$.ajax({
    type:     "post",
    data:     {id: 0},
    cache:    false,
    url:      "doIt.php",
    dataType: "text",
    error: function (request, error) {
        console.log(arguments);
        alert(" Can't do because: " + error);
    },
    success: function () {
        alert(" Done ! ");
    }
});

Now my result ist:

log:

 [XMLHttpRequest readyState=4 status=500, "error", undefined]

alert:

> Can't do because: error

Any ideas?

Php Solutions


Solution 1 - Php

Try:

error: function(xhr, status, error) {
  var err = eval("(" + xhr.responseText + ")");
  alert(err.Message);
}

Solution 2 - Php

For me, this simply works:

error: function(xhr, status, error) {
  alert(xhr.responseText);
}

Solution 3 - Php

Look at the responseText property of the request parameter.

Solution 4 - Php

As ultimately suggested by this other answer and it's comments on this page:

error: function(xhr, status, error) {
  var err = JSON.parse(xhr.responseText);
  alert(err.Message);
}

Solution 5 - Php

The best simple approach :

error: function (xhr) {
var err = JSON.parse(xhr.responseText);
alert(err.message);
}

Solution 6 - Php

This is what worked for me

    function showErrorMessage(xhr, status, error) {
        if (xhr.responseText != "") {
            
            var jsonResponseText = $.parseJSON(xhr.responseText);
            var jsonResponseStatus = '';
            var message = '';
            $.each(jsonResponseText, function(name, val) {
                if (name == "ResponseStatus") {
                    jsonResponseStatus = $.parseJSON(JSON.stringify(val));
                     $.each(jsonResponseStatus, function(name2, val2) {
                         if (name2 == "Message") {
                             message = val2;
                         }
                     });
                }
            });

            alert(message);
        }
    }

Solution 7 - Php

If you want to get Syntax Error with line number, use this

error: function(xhr, status, error) {
  alert(error);
}

Solution 8 - Php

you can try it too:

$(document).ajaxError(
	function (event, jqXHR, ajaxSettings, thrownError) {
	    alert('[event:' + event + '], [jqXHR:' + jqXHR + '], [ajaxSettings:' + ajaxSettings + '], [thrownError:' + thrownError + '])');
	});

Solution 9 - Php

This will allow you to see the whole response not just the "responseText" value

error: function(xhr, status, error) {
	var acc = []
	$.each(xhr, function(index, value) {
		acc.push(index + ': ' + value);
	});
	alert(JSON.stringify(acc));
}

Solution 10 - Php

I used this, and it worked perfectly.

error: function(xhr, status, error){
     alertify.error(JSON.parse(xhr.responseText).error);
}

Solution 11 - Php

err.responseText contain HTML tags you can get error message from these tags easily...
For example:

$(err.responseText)
// k.fn.init(12) [text, title, text, meta, text, style, text, span, text, font, text, //comment]

$.ajax({
    async: bAsync,
    type: 'POST',
    url: pUrl,
    contentType: 'application/json; charset=utf-8;',
    dataType: 'json',
    data: pData,
    success: fn,
    error: function(err) {
        alert( $($(err.responseText)[1]).text() )
        debugger;
    }
});

Solution 12 - Php

If you're not having a network error, and wanting to surface an error from the backend, for exmple insufficient privileges, server your response with a 200 and an error message. Then in your success handler check data.status == 'error'

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionjantimonView Question on Stackoverflow
Solution 1 - PhpAlex BagnoliniView Answer on Stackoverflow
Solution 2 - PhpHaoQi LiView Answer on Stackoverflow
Solution 3 - PhptvanfossonView Answer on Stackoverflow
Solution 4 - PhpBrad ParksView Answer on Stackoverflow
Solution 5 - PhpMazen EmbabyView Answer on Stackoverflow
Solution 6 - Phpuser3255682View Answer on Stackoverflow
Solution 7 - PhpKarthikeyan PView Answer on Stackoverflow
Solution 8 - Php85tisgirjetuji8View Answer on Stackoverflow
Solution 9 - PhpKareemView Answer on Stackoverflow
Solution 10 - PhpJuan Silupú MazaView Answer on Stackoverflow
Solution 11 - PhpMUHAMMAD NOMAN KHALIDView Answer on Stackoverflow
Solution 12 - PhpchovyView Answer on Stackoverflow