46 lines (44 sloc) 1.172 kB
(function( jQuery ) { | |
if ( window.XDomainRequest ) { | |
jQuery.ajaxTransport(function( s ) { | |
if ( s.crossDomain && s.async ) { | |
if ( s.timeout ) { | |
s.xdrTimeout = s.timeout; | |
delete s.timeout; | |
} | |
var xdr; | |
return { | |
send: function( _, complete ) { | |
function callback( status, statusText, responses, responseHeaders ) { | |
xdr.onload = xdr.onerror = xdr.ontimeout = xdr.onprogress = jQuery.noop; | |
xdr = undefined; | |
complete( status, statusText, responses, responseHeaders ); | |
} | |
xdr = new XDomainRequest(); | |
xdr.open( s.type, s.url ); | |
xdr.onload = function() { | |
callback( 200, "OK", { text: xdr.responseText }, "Content-Type: " + xdr.contentType ); | |
}; | |
xdr.onerror = function() { | |
callback( 404, "Not Found" ); | |
}; | |
xdr.onprogress = function() {}; | |
if ( s.xdrTimeout ) { | |
xdr.ontimeout = function() { | |
callback( 0, "timeout" ); | |
}; | |
xdr.timeout = s.xdrTimeout; | |
} | |
xdr.send( ( s.hasContent && s.data ) || null ); | |
}, | |
abort: function() { | |
if ( xdr ) { | |
xdr.onerror = jQuery.noop(); | |
xdr.abort(); | |
} | |
} | |
}; | |
} | |
}); | |
} | |
})( jQuery ); |