How can I catch jQuery AJAX errors?

61,544

Solution 1

try this:

$.ajax({
    url: remoteURL,
    type: 'GET',
    error: function (err) {
        console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
    }
}).always(function(jqXHR, textStatus) {
    if (textStatus != "success") {
        alert("Error: " + jqXHR.statusText);
    }
});

XHR Listener:

$.ajax({
    url: remoteURL,
    type: 'GET',
    xhr: function(){
        var xhr = new window.XMLHttpRequest();
        xhr.addEventListener("error", function(evt){
            alert("an error occured");
        }, false);
        xhr.addEventListener("abort", function(){
            alert("cancelled");
        }, false);

        return xhr;
    },
    error: function (err) {
        console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
    }
});

Solution 2

You can use web developer console in google chrome. Press F12. And use Networks tab for checking response, And for JavaSvript and jQuery and Ajax errors you can use Console tab. :)

Try this by adding to your ajax function :

error: function(XMLHttpRequest, textStatus, errorThrown) {
 alert(errorThrown);
Share:
61,544

Related videos on Youtube

AR.
Author by

AR.

I'm a hack, not a hacker. A hobbyist, not a pro. But I do love to code!

Updated on July 09, 2022

Comments

  • AR.
    AR. almost 2 years

    When an AJAX request is submitted to a site, server-side errors are easily handled with the jQuery promise approach. .done(), .fail(), etc. However for some requests (e.g. to an invalid site or one that doesn't accept cross-origin requests), an exception occurs immediately as the call is made. Here's an example of one error in the console:

    XMLHttpRequest cannot load http://someotherserver/api/blahblah. Origin http://localhost:52625 is not allowed by Access-Control-Allow-Origin.

    Yes, I know about CORS...that's not the issue. What I'm actually doing is trying a web api call to test if the server IP/name is correct

    I'm aware of the error option in the jQuery request syntax:

    $.ajax({
        url: remoteURL,
        type: 'GET',
        error: function (err) {
            console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
        }
    }).etc.etc.
    

    The error is handled here, but exceptions are still logged in the console. It seemed reasonable to wrap the above in a try-catch block, but that doesn't seem to help.

    I've found this question, but the solution involves hacking the jQuery code. Surely there's a better way to catch these errors and not clog up the console logs??

    • Arun P Johny
      Arun P Johny over 10 years
      I don't think it is possible because that error logging is done by the browser network monitoring layer
    • AR.
      AR. over 10 years
      Small temporary servers will be deployed in a field camp environment. My users will need the option to set the server IP address for the ajax web api calls. I need a way to test if the address is valid. If there's a better way I'm happy to hear about it. :)
    • Ripa Saha
      Ripa Saha over 10 years
      check stackoverflow.com/questions/377644/… , may be You will get Your solution.
    • AR.
      AR. over 10 years
      @ripa: I'm afraid not - the error is generated before any server-side code is run.
    • Ripa Saha
      Ripa Saha over 10 years
      @AR. before ajax post error is coming!!!! :(
  • Mr.Manhattan
    Mr.Manhattan over 10 years
    that would be for debugging purpose
  • AR.
    AR. over 10 years
    @ShreejiShah: Yes, it's the console where I see the errors, of course. Your answer doesn't help with the actual problem. :p
  • AR.
    AR. over 10 years
    I've tried .always() but it is called after the ajax request is made, sometime afterwards. The browser errors I'm referring to occur immediately -as- the request is started.
  • Mr.Manhattan
    Mr.Manhattan over 10 years
    hmm...you could try and add an XHR Listener before the request is send (wait a moment, editing answer)