Skip to content
Permalink
Browse files

No ticket: Small ajax/xhr size optimizations

  • Loading branch information...
gibson042 committed Oct 28, 2013
1 parent f9d41ac commit 705216dc4664a85cdb44b460f8c2e0edcf27dd97
Showing with 19 additions and 6 deletions.
  1. +19 −6 src/ajax/xhr.js
@@ -10,16 +10,16 @@ jQuery.ajaxSettings.xhr = function() {
} catch( e ) {}
};

var xhrSupported = jQuery.ajaxSettings.xhr(),
var xhrId = 0,
xhrCallbacks = {},
xhrSuccessStatus = {
// file protocol always yields status code 0, assume 200
0: 200,
// Support: IE9
// #1450: sometimes IE returns 1223 when it should be 204
1223: 204
},
xhrId = 0,
xhrCallbacks = {};
xhrSupported = jQuery.ajaxSettings.xhr();

// Support: IE9
// Open requests must be manually aborted on unload (#5280)
@@ -36,23 +36,29 @@ support.ajax = xhrSupported = !!xhrSupported;

jQuery.ajaxTransport(function( options ) {
var callback;

// Cross domain only allowed if supported through XMLHttpRequest
if ( support.cors || xhrSupported && !options.crossDomain ) {
return {
send: function( headers, complete ) {
var i, id,
xhr = options.xhr();
var i,
xhr = options.xhr(),
id = ++xhrId;

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

// Apply custom fields if provided
if ( options.xhrFields ) {
for ( i in options.xhrFields ) {
xhr[ i ] = options.xhrFields[ i ];
}
}

// Override mime type if needed
if ( options.mimeType && xhr.overrideMimeType ) {
xhr.overrideMimeType( options.mimeType );
}

// X-Requested-With header
// For cross-domain requests, seeing as conditions for a preflight are
// akin to a jigsaw puzzle, we simply never set it to be sure.
@@ -61,16 +67,19 @@ jQuery.ajaxTransport(function( options ) {
if ( !options.crossDomain && !headers["X-Requested-With"] ) {
headers["X-Requested-With"] = "XMLHttpRequest";
}

// Set headers
for ( i in headers ) {
xhr.setRequestHeader( i, headers[ i ] );
}

// Callback
callback = function( type ) {
return function() {
if ( callback ) {
delete xhrCallbacks[ id ];
callback = xhr.onload = xhr.onerror = null;

if ( type === "abort" ) {
xhr.abort();
} else if ( type === "error" ) {
@@ -95,16 +104,20 @@ jQuery.ajaxTransport(function( options ) {
}
};
};

// Listen to events
xhr.onload = callback();
xhr.onerror = callback("error");

// Create the abort callback
callback = xhrCallbacks[( id = xhrId++ )] = callback("abort");
callback = xhrCallbacks[ id ] = callback("abort");

// Do send the request
// This may raise an exception which is actually
// handled in jQuery.ajax (so no try/catch here)
xhr.send( options.hasContent && options.data || null );
},

abort: function() {
if ( callback ) {
callback();

0 comments on commit 705216d

Please sign in to comment.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.