Bug Tracker

Ticket #3235 (new bug)

Opened 3 months ago

Last modified 3 months ago

ajax error event is not being reported in some situations

Reported by: attilam Assigned to: anonymous
Type: bug Priority: major
Milestone: 1.3 Component: ajax
Version: 1.2.6 Keywords:
Cc: attilam, flesler, nathanhammond Needs: Test Case

Description

When you are trying to call a URL that fails due to such errors as NS_ERROR_DOM_BAD_URI, the error function registered with the ajax settings is not being called.

The reason it is not called is because an exception is thrown during the call at either of the following lines:

xhr.open(type, s.url, s.async, s.username, s.password); or xhr.open(type, s.url, s.async);

To resolve this issue, wrap the above calls in a try/catch block and in the catch block call the following:

jQuery.handleError(s, xhr, null, e);

Attachments

3235.html (0.5 kB) - added by nathanhammond 3 months ago.
Test Case
3235.diff (0.7 kB) - added by nathanhammond 3 months ago.
Better Patch.

Change History

  Changed 3 months ago by flesler

  • cc set to attilam, flesler
  • need changed from Review to Test Case

Could you provide a test case ? a minimalistic html file with the requires html and js to reproduce the problem. Thanks.

Changed 3 months ago by nathanhammond

Test Case

Changed 3 months ago by nathanhammond

Better Patch.

  Changed 3 months ago by nathanhammond

The new patch takes care of the problem and passes all collected information to the error handler as it returns.

follow-up: ↓ 5   Changed 3 months ago by flesler

  • cc changed from attilam, flesler to attilam, flesler, nathanhammond

Does that test case actually cause an exception ? it seems fine to me.

  Changed 3 months ago by flesler

  • owner deleted
  • component changed from core to ajax

in reply to: ↑ 3   Changed 3 months ago by nathanhammond

Replying to flesler:

Does that test case actually cause an exception ? it seems fine to me.

It does locally for me. It is trying to request http://jquery.com when I'm on localhost. I'm updating the patch to add a test.

  Changed 3 months ago by nathanhammond

I'm having trouble figuring out why adding a test for this one is causing another test to fail to start (pass-through request object). The whole test suite works just fine without adding in the new test, so I'm obviously doing something wrong.

What I'm working off of (appears right after the error callbacks):

test("jQuery.ajax() - xhr.open error callbacks", function() {
    expect( 3 );
    stop();
    jQuery('#foo').ajaxStart(function(){
        start();
        ok( true, "ajaxStart" );
    }).ajaxStop(function(){
        ok( true, "ajaxStop" );
    }).ajaxSend(function(){
        ok( true, "ajaxSend" );
    }).ajaxComplete(function(){
        ok( true, "ajaxComplete" );
    }).ajaxError(function(){
        ok( true, "ajaxError" );
    }).ajaxSuccess(function(){
        ok( false, "ajaxSuccess" );
    });
    jQuery.ajax({
        type: "GET",
        dataType: "html",
        url: url("http://jquery.com"),
        beforeSend: function(){ ok(true, "beforeSend"); },
        success: function(){ ok(false, "success"); },
        error: function(){ ok(true, "error"); },
        complete: function(){ ok(true, "complete"); }
    });
});
Note: See TracTickets for help on using tickets.