Instantly share code, notes, and snippets.

Embed
What would you like to do?
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 );
@marano

This comment has been minimized.

marano commented Aug 20, 2013

26: var r = JSON.parse(xdr.responseText);

is it correct to assume that all responses are going to be JSON?

@Innovolved

This comment has been minimized.

Innovolved commented Aug 22, 2013

This works fine on my work network. It fails when using my 3G mobile network. Why is this so ? EI9

@PremshankarTiwari

This comment has been minimized.

PremshankarTiwari commented Dec 2, 2013

I am getting an error....'JSON' is undefined .....at line 26

@prisme

This comment has been minimized.

prisme commented Mar 18, 2014

THANKS

@gon250

This comment has been minimized.

gon250 commented May 5, 2015

I spent a full day to fix an issue with ie. I really appreciate you shared this code, Thanks!! 😃

@tingwei628

This comment has been minimized.

tingwei628 commented Oct 14, 2015

Thanks, it really helps a lot!

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