aboutsummaryrefslogtreecommitdiffstats
path: root/src/ajax
diff options
context:
space:
mode:
authorRichard Gibson <richard.gibson@gmail.com>2013-10-28 17:41:34 -0400
committerRichard Gibson <richard.gibson@gmail.com>2013-10-28 17:53:39 -0400
commit705216dc4664a85cdb44b460f8c2e0edcf27dd97 (patch)
tree4b6114a61be641de9ebff3b451a188b7d259eb5e /src/ajax
parentf9d41ac641dcb5a93ba8a9027476b160d8f41111 (diff)
downloadjquery-705216dc4664a85cdb44b460f8c2e0edcf27dd97.tar.gz
jquery-705216dc4664a85cdb44b460f8c2e0edcf27dd97.zip
No ticket: Small ajax/xhr size optimizations
Diffstat (limited to 'src/ajax')
-rw-r--r--src/ajax/xhr.js25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/ajax/xhr.js b/src/ajax/xhr.js
index 5dbfc646f..c240f3b31 100644
--- a/src/ajax/xhr.js
+++ b/src/ajax/xhr.js
@@ -10,7 +10,8 @@ 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,
@@ -18,8 +19,7 @@ var xhrSupported = jQuery.ajaxSettings.xhr(),
// #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();