Bug Tracker

Ticket #5114: ajax-xhr.abort()-impl.patch

File ajax-xhr.abort()-impl.patch, 1.6 KB (added by Evolver, 10 years ago)

Patch to correctly handle XMLHttpRequest.abort from jQuery.ajax

  • ajax.js

     
    161161                contentType: "application/x-www-form-urlencoded",
    162162                processData: true,
    163163                async: true,
     164                requestPolling: true,
    164165                /*
    165166                timeout: 0,
    166167                data: null,
     
    369370
    370371                // Wait for a response to come back
    371372                var onreadystatechange = function(isTimeout){
    372                         // The request was aborted, clear the interval and decrement jQuery.active
    373                         if ( xhr.readyState === 0 ) {
    374                                 if ( ival ) {
    375                                         // clear poll interval
    376                                         clearInterval( ival );
    377                                         ival = null;
    378 
    379                                         // Handle the global AJAX counter
    380                                         if ( s.global && ! --jQuery.active ) {
    381                                                 jQuery.event.trigger( "ajaxStop" );
    382                                         }
    383                                 }
    384 
    385                         // The transfer is complete and the data is available, or the request timed out
    386                         } else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
     373                        // Process request complete, request timeout and request abort events
     374                        if ( !requestDone && xhr && (xhr.readyState == 4 || xhr.readyState == 0 || isTimeout == "timeout") ) {
    387375                                requestDone = true;
    388376
    389377                                // clear poll interval
     
    435423                };
    436424
    437425                if ( s.async ) {
    438                         // don't attach the handler to the request, just poll it instead
    439                         var ival = setInterval(onreadystatechange, 13);
    440 
     426                 
     427                        if( s.requestPolling) {
     428                          // don't attach the handler to the request, just poll it instead
     429                          var ival = setInterval(onreadystatechange, 13);
     430                         
     431                        } else {
     432                                xhr.onreadystatechange =onreadystatechange;
     433                        }
     434                 
    441435                        // Timeout checker
    442436                        if ( s.timeout > 0 ) {
    443437                                setTimeout(function(){