Skip to content

Instantly share code, notes, and snippets.

@gon250
Created May 5, 2015 15:43
Show Gist options
  • Select an option

  • Save gon250/623f4aa7f5ab48a0bb9e to your computer and use it in GitHub Desktop.

Select an option

Save gon250/623f4aa7f5ab48a0bb9e to your computer and use it in GitHub Desktop.
Adds XDomainRequest IE CORS support to jQuery
// Based on https://github.com/jaubourg/ajaxHooks/blob/master/src/ajax/xdr.js
(function( jQuery ) {
if ( window.XDomainRequest && !jQuery.support.cors ) {
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;
jQuery.event.trigger( "ajaxStop" );
complete( status, statusText, responses, responseHeaders );
}
xdr = new XDomainRequest();
xdr.open( s.type, s.url );
xdr.onload = function() {
var status = 200;
var message = xdr.responseText;
var r = JSON.parse(xdr.responseText);
if (r.StatusCode && r.Message) {
status = r.StatusCode;
message = r.Message;
}
callback( status , message, { text: message }, "Content-Type: " + xdr.contentType );
};
xdr.onerror = function() {
callback( 500, "Unable to Process Data" );
};
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 );
@gon250
Copy link
Copy Markdown
Author

gon250 commented May 5, 2015

Require jquery

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment