/*! * jquery-ajaxtransport-xdomainrequest - v1.0.4 - 2015-03-05 * https://github.com/moonscript/jquery-ajaxtransport-xdomainrequest * copyright (c) 2015 jason moon (@jsonmoon) * licensed mit (/blob/master/license.txt) */ (function(factory) { if (typeof define === 'function' && define.amd) { // amd. register as anonymous module. define(['jquery'], factory); } else if (typeof exports === 'object') { // commonjs module.exports = factory(require('jquery')); } else { // browser globals. factory(jquery); } }(function($) { // only continue if we're on ie8/ie9 with jquery 1.5+ (contains the ajaxtransport function) if ($.support.cors || !$.ajaxtransport || !window.xdomainrequest) { return $; } var httpregex = /^(https?:)?\/\//i; var getorpostregex = /^get|post$/i; var sameschemeregex = new regexp('^(\/\/|' + location.protocol + ')', 'i'); // ajaxtransport exists in jquery 1.5+ $.ajaxtransport('* text html xml json', function(options, useroptions, jqxhr) { // only continue if the request is: asynchronous, uses get or post method, has http or https protocol, and has the same scheme as the calling page if (!options.crossdomain || !options.async || !getorpostregex.test(options.type) || !httpregex.test(options.url) || !sameschemeregex.test(options.url)) { return; } var xdr = null; return { send: function(headers, complete) { var postdata = ''; var usertype = (useroptions.datatype || '').tolowercase(); xdr = new xdomainrequest(); if (/^\d+$/.test(useroptions.timeout)) { xdr.timeout = useroptions.timeout; } xdr.ontimeout = function() { complete(500, 'timeout'); }; xdr.onload = function() { var allresponseheaders = 'content-length: ' + xdr.responsetext.length + '\r\ncontent-type: ' + xdr.contenttype; var status = { code: 200, message: 'success' }; var responses = { text: xdr.responsetext }; try { if (usertype === 'html' || /text\/html/i.test(xdr.contenttype)) { responses.html = xdr.responsetext; } else if (usertype === 'json' || (usertype !== 'text' && /\/json/i.test(xdr.contenttype))) { try { responses.json = $.parsejson(xdr.responsetext); } catch(e) { status.code = 500; status.message = 'parseerror'; //throw 'invalid json: ' + xdr.responsetext; } } else if (usertype === 'xml' || (usertype !== 'text' && /\/xml/i.test(xdr.contenttype))) { var doc = new activexobject('microsoft.xmldom'); doc.async = false; try { doc.loadxml(xdr.responsetext); } catch(e) { doc = undefined; } if (!doc || !doc.documentelement || doc.getelementsbytagname('parsererror').length) { status.code = 500; status.message = 'parseerror'; throw 'invalid xml: ' + xdr.responsetext; } responses.xml = doc; } } catch(parsemessage) { throw parsemessage; } finally { complete(status.code, status.message, responses, allresponseheaders); } }; // set an empty handler for 'onprogress' so requests don't get aborted xdr.onprogress = function(){}; xdr.onerror = function() { complete(500, 'error', { text: xdr.responsetext }); }; if (useroptions.data) { postdata = ($.type(useroptions.data) === 'string') ? useroptions.data : $.param(useroptions.data); } xdr.open(options.type, options.url); xdr.send(postdata); }, abort: function() { if (xdr) { xdr.abort(); } } }; }); return $; }));