36 lines
999 B
JavaScript
36 lines
999 B
JavaScript
// Ajax mode: abort
|
|
// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
|
|
// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
|
|
|
|
var pendingRequests = {},
|
|
ajax;
|
|
|
|
// Use a prefilter if available (1.5+)
|
|
if ( $.ajaxPrefilter ) {
|
|
$.ajaxPrefilter( function( settings, _, xhr ) {
|
|
var port = settings.port;
|
|
if ( settings.mode === "abort" ) {
|
|
if ( pendingRequests[ port ] ) {
|
|
pendingRequests[ port ].abort();
|
|
}
|
|
pendingRequests[ port ] = xhr;
|
|
}
|
|
} );
|
|
} else {
|
|
|
|
// Proxy ajax
|
|
ajax = $.ajax;
|
|
$.ajax = function( settings ) {
|
|
var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode,
|
|
port = ( "port" in settings ? settings : $.ajaxSettings ).port;
|
|
if ( mode === "abort" ) {
|
|
if ( pendingRequests[ port ] ) {
|
|
pendingRequests[ port ].abort();
|
|
}
|
|
pendingRequests[ port ] = ajax.apply( this, arguments );
|
|
return pendingRequests[ port ];
|
|
}
|
|
return ajax.apply( this, arguments );
|
|
};
|
|
}
|